Pípọn IPv6 láàrin ibi méjì kọjá VPN tí ó wà
WAN tí ó ní IPv4 nìkan ṣì lè gbé IPv6 inú. Tẹ̀lé àwọn yàn-ṣe, àwọn ipa kernel, gbígbé jáde àti àfikún ìpadà tí ó ń fi àwọn ìdáhùn sílẹ̀ ní ìdákẹ́jẹ́.
Nígbà tí o bá fi àfikún IPv6 kún ọ̀nà ojú-ibo-ẹ̀rọ kan, packet kò rin bí àwòrán ṣe dábàá. Gateway àdúgbò gbé gbogbo packet IPv6, ó fi í pamọ́, ó sì fi àkọ́lé IP òde sí iwájú rẹ̀ èyí tí ìdílé àdírẹ́sì rẹ̀ jẹ́ dídápolò látọwọ́ àwọn àdírẹ́sì ojú-ipẹ̀, kì í ṣe ohun tí ó wà nínú. Gateway tí ó jìnnà yọ àkọ́lé òde yẹn kúrò, ó sì gbé packet àkọ́kọ́ lọ sí LAN rẹ̀, níbi tí ó ti tún jẹ́ packet IPv6 lasan. Ọ̀nà òde àti ìrìnnàkò inú jẹ́ ìbáraẹnisọ̀rọ̀ méjì ọ̀tọ̀ tí ó pín kọ́kọ́rọ́ kan, bíi méjì kan, àti kò sí ohun mìíràn.
Àkọ́lé méjì, ìdílé àdírẹ́sì méjì
Nínú ipò ọ̀nà IPsec, packet IPv6 inú di ẹrù ní ẹ̀yìn àkọ́lé ESP. Àkọ́lé òde tí ó gbé packet ESP yẹn lè jẹ́ IPv4 tàbí IPv6, ó sì tẹ̀lé local_addrs àti remote_addrs. WireGuard ṣe bẹ́ẹ̀ pẹ̀lú ayẹyẹ díẹ̀: packet inú ni ẹrù datagram UDP sí ojú-ipẹ̀ alájọṣepọ̀. Àwọn méjèèjì fi àkọ́lé inú sílẹ̀ láìfọwọ́ kàn, ìdí nìyẹn tí ẹ̀gbẹ́ jìnnà fi lè tọ́ ọ lẹ́yìn ìtú.
Ọ̀nà láàrin àwọn ibi rí UDP 4500 nìkan nígbà tí IPsec bá ń lo NAT traversal, tàbí UDP 51820 fún olùgbọ́ WireGuard àkọ́kọ́. Gbogbo olùgbá-ọ̀nà kúrò níbẹ̀ lè jẹ́ IPv4 nìkan, ìrìnnàkò IPv6 sì ṣì ń kọjá, nítorí kì í yọjú gẹ́gẹ́ bí packet IPv6 lórí ọ̀nà yẹn. Ìyẹn fúnni ní ìpínyà àkọ́kọ́ tí ó mọ́: tcpdump -ni eth0 udp port 51820 fi ọ̀nà tí a fi pamọ́ hàn, tcpdump -ni wg0 ip6 fi ìrìnnàkò inú hàn. Gbígbà òde tí ó ṣúpọ̀ pẹ̀lú ti inú tí ó dákẹ́ túmọ̀ sí pé kernel kò fi IPv6 sínú ọ̀nà; ìyẹn jẹ́ pípọ̀n tàbí ìlànà, kì í ṣe ipò ìsopọ̀.
Gateway tún dín Hop Limit inú kù bí ó ti ń gbé jáde, nítorí náà àwọn ojú-ipẹ̀ ka bí olùgbá-ọ̀nà lórí ọ̀nà IPv6. Iye hops òde àti Hop Limit inú ń rìn lọ́tọ̀ọ̀tọ̀, àti packet tí ó kú ní gateway jìnnà kú nínú gbígbé jáde, kì í ṣe nínú ìfipamọ́.
Àwọn yàn-ṣe àti AllowedIPs ni àkójọ ìyọ̀nda
IKEv2 ń bára ṣe ìdúnàádúrà lórí àwọn àfikún inú wo ni child SA lè gbé. Lórí strongSwan 5.9 àti lẹ́yìn náà, kíkọ wọ́n sínú swanctl.conf rí bẹ́ẹ̀:
children {
net6 {
local_ts = 2001:db8:aa::/48
remote_ts = 2001:db8:bb::/48
mode = tunnel
esp_proposals = aes256gcm16-prfsha384-ecp384
start_action = trap
}
}
Fi local_ts àti remote_ts sílẹ̀, strongSwan á yọ wọ́n láti inú àwọn subnet ti interface tí ó yàn. Lórí ẹ̀rọ dual-stack ọ̀nà kúkúrú yẹn sábà ń mú bíi IPv4 nìkan jáde: SA ń gòkè, a sì kọ IPv6 sílẹ̀ kí ó tó dé kóòdù ESP. Kíkọ àwọn àfikún méjèèjì mú kí SA lè gbé wọn, start_action = trap sì gbé e sókè ní packet àkọ́kọ́ tí ó báramu.
WireGuard ní àkójọ kan tí ó ń ṣe iṣẹ́ méjì. Nínú blọ́kù alájọṣepọ̀, AllowedIPs = 2001:db8:bb::/48, fd00:bb::/48 jẹ́ ọ̀nà tí a fi sínú nígbà ìránṣẹ́ àti àyọ̀ tí a ń lò nígbà gbígbà: packet tí a tú èyí tí orísun inú rẹ̀ wà lóde àkójọ alájọṣepọ̀ yẹn ni a ń fi sílẹ̀ ní ìdákẹ́jẹ́. wg-quick ń fi ọ̀nà kún fún kíkún-ọ̀rọ̀ kọ̀ọ̀kan, nítorí náà blọ́kù alájọṣepọ̀ ní ìsàlẹ̀ kò nílò àṣẹ ip -6 route ọ̀tọ̀.
[Interface]
Address = 2001:db8:aa:ff::1/64, fd00:aa:ff::1/64
ListenPort = 51820
[Peer]
PublicKey = <site-b-public-key>
Endpoint = 203.0.113.20:51820
AllowedIPs = 2001:db8:bb::/48, fd00:bb::/48
Àwọn àkójọ méjèèjì gbọdọ̀ jẹ́ àwòrán: ibi B gba àfikún ibi A gẹ́gẹ́ bí yàn-ṣe jìnnà, ó sì ń tọ́ ọ padà, ọ̀nà sì ń ṣiṣẹ́ nìkan nígbà tí àwọn ìtọ́sọ́nà méjèèjì bá gbà. Àkójọ tí kò dọ́gba ń fúnni ní àmì tí ó ń gba àkókò jù: handshake tí ó yá, àwọn kíkà tí ń rìn ní ẹ̀gbẹ́ kan, àti ping láti A sí B tí ó yọrísí nígbà tí kò sí ohun kan láti B tí ó dé A.
Gbígbé jáde, àwọn ọ̀nà àti àfikún ìpadà
Linux kì í gbé IPv6 jáde títí o fi sọ, ìtòlẹ́sẹẹsẹ náà sì jẹ́ fún namespace kọ̀ọ̀kan kì í ṣe fún interface kọ̀ọ̀kan:
sysctl -w net.ipv6.conf.all.forwarding=1
ip -6 route add 2001:db8:bb::/48 dev wg0
ip -6 route get 2001:db8:bb::10 from 2001:db8:aa::10
Ìlà kejì ni èyí tí àwọn ènìyàn ń gbàgbé nínú àwọn àpẹẹrẹ tí ó dá lórí ọ̀nà. IPsec tí ó dá lórí ìlànà ń fi ìlànà XFRM sínú tí ó bá àwọn àfikún mu, ṣùgbọ́n ìṣètò tí ó dá lórí ọ̀nà pẹ̀lú vti6 tàbí WireGuard nílò ọ̀nà IPv6 gidi tí ó tọ́ka sí ẹ̀rọ yẹn. Jẹ́ kí sysctl wà ní àsìkò pẹ́ nínú /etc/sysctl.d/; bí bẹ́ẹ̀ kọ́, àtúnbẹ̀rẹ̀ ń dá gbígbé jáde padà sí àìṣiṣẹ́ ní ìdákẹ́jẹ́.
Gbígbé jáde ní ipa ẹ̀yìn tí ó yẹ kí a mọ̀: kernel yóò máa kọ ojú àwọn ìkéde olùgbá-ọ̀nà sílẹ̀ àyàfi tí net.ipv6.conf.<wan>.accept_ra bá jẹ́ 2, nítorí náà gateway tí àdírẹ́sì WAN rẹ̀ ń dé nípasẹ̀ SLAAC lè pàdánù ọ̀nà àkọ́kọ́ rẹ̀ ní àkókò tí o bá tan gbígbé jáde. Ṣètò accept_ra = 2 lórí interface yẹn nínú fáìlì kan náà, ọ̀nà yóò sì wà níláàyè. Àárín ibi B gbọdọ̀ tún kọ́ 2001:db8:aa::/48 láti gateway ọ̀nà, nípasẹ̀ ọ̀nà ìdúró tàbí ìlànà ìtọ́sọ́nà lórí ọ̀nà, bí bẹ́ẹ̀ kọ́ ìdáhùn yóò kú sínú nẹ́tíwọ́kì B fúnra rẹ̀.
Àyẹ̀wò ìgbésẹ̀ mẹ́rin tí ó ń fi ibi tí ó já fáwẹ́lẹ̀ hàn
Ṣiṣẹ́ ní ìtòlẹ́sẹẹsẹ yìí kí o sì dúró ní ìgbésẹ̀ àkọ́kọ́ tí ó kùnà, nítorí ìgbésẹ̀ kọ̀ọ̀kan tí ó tẹ̀lé ń gbára lé ti àwọn tí ó ṣáájú.
- Àwọn yàn-ṣe:
swanctl --list-sasyẹ kí ó fi bíi àfikún IPv6 hàn lórí child SA, tàbíwg show wg0 allowed-ipsàfikún jìnnà pẹ̀lúlatest-handshakestuntun. - Ọ̀nà kernel:
ip -6 route get 2001:db8:bb::10gbọdọ̀ dáhùn pẹ̀lú ẹ̀rọ ọ̀nà, kì í ṣe interface WAN. - Gbígbà inú:
tcpdump -ni wg0 ip6nígbà tí o ń ping láàrin àwọn olùgbà LAN gidi. Àwọn packet tí ó ń jáde ṣùgbọ́n kò sí èyí tí ó ń padà ń tọ́ka sí ọ̀nà tàbí firewall B; kò sí packet rárá tí ó ń tọ́ka padà sí ìgbésẹ̀ 1 tàbí 2. - Ibùdó: lórí ẹ̀rọ B,
ss -6 -ltnń jẹ́rìí pé iṣẹ́ náà ń gbọ́ lórí IPv6, àwọn kíkà firewall àdúgbò sì ń fi hàn bóyá a gba packet náà tàbí a fi í sílẹ̀.
MTU wà nínú ìgbà kan náà. Àwọn olùgbá-ọ̀nà IPv6 kì í pín, nítorí náà packet tí ó tóbi jù ni a ń fi sílẹ̀, Packet Too Big sì ń padà sí olùránṣẹ́. Bí handshake àti àwọn ping kékeré bá ń ṣiṣẹ́ ṣùgbọ́n gbígbé fáìlì dúró, dín ẹrù kù títí yóò fi kọjá: ping -6 -s 1400 -c 3 2001:db8:bb::10. Àwọn interface WireGuard ní MTU báìtì 1420 ní àkọ́kọ́, IPsec lórí IPv4 sì ń yọ síi, nítorí náà ṣíṣètò MTU inú sàn ju fíretí ìwádìí MTU ọ̀nà kọjá firewall tí ó ń fi ICMPv6 sílẹ̀.
Àwọn ipò ìkùnà tí ó dàbí ìṣòro firewall
Èyí tí ó wọ́pọ̀ jù kì í ṣe firewall rárá: iṣẹ́ náà so mọ́ 0.0.0.0 dípò ::, àkọsílẹ̀ AAAA wà, olùlo sì ń gba ìkọ̀sílẹ̀ kíákíá lórí IPv6 tí aṣàwákiri dual-stack ń fi pamọ́ nípasẹ̀ ìpadà sí IPv4. Bí àwọn ètò kan bá kùnà nìkan, yẹ àwọn ìdílé gbígbọ́ wò kí o tó fọwọ́ kan àkójọ ìlànà.
Èkejì ni àyọ̀ ICMPv6. Neighbor Discovery àti Packet Too Big jẹ́ apá ti iṣẹ́ déédéé, kì í ṣe àyẹ̀wò, ìlànà tí ó sì ń fi gbogbo ICMPv6 sílẹ̀ ń mú ọ̀nà tí ó so, tí ó jẹ́rìí, tí ó sì dúró lórí ohunkóhun tí ó tóbi ju packet kékeré lọ. Gba àwọn irú tí ọ̀nà gbára lé kí o sì fi àwọn kíkà sílẹ̀ ní ṣíṣí kí ìyọ̀sílẹ̀ lè hàn.
Ẹ̀kẹta ni àfikún tí a fi kún ọ̀nà ṣùgbọ́n tí a kò fi kún ètò àdírẹ́sì ti ibi tí ó ni í, nítorí náà kò sí olùgbá-ọ̀nà tí ó ń kéde rẹ̀, kò sì sí ẹ̀rọ tí ó lè dáhùn láti inú rẹ̀. Bẹ̀rẹ̀ pẹ̀lú àfikún kan àti bíi ẹ̀rọ kan, fi ìtọ́sọ́nà méjèèjì hàn pẹ̀lú ìgbésẹ̀ mẹ́rin, lẹ́yìn náà fi ìyókù kún; àfikún tí ó já yóò wà gẹ́gẹ́ bí ìlà kan nínú ìṣètò dípò àtúnyẹ̀wò. Ìwé ìtọ́ka ìjọba kan ṣoṣo tí ó yẹ kí a pa mọ́ ní ṣíṣí ni RFC 8200, tí ó ń ṣàlàyé àkọ́lé tí ọ̀nà ń gbé.