Rírìn-àjò ìsọ̀rọ̀-olùgbà kọjá VPN nínú VM: àwọn àyẹ̀wò mẹ́fà
Àwọn àyẹ̀wò mẹ́fà ní ìtẹ̀lélẹ́sẹ̀ láti sọ VM di ẹnubodè VPN tí olùgbà tirẹ̀ ń gbà kọjá: ipò adápítà, gbígbé kọjá, NAT, àwọn ọ̀nà olùgbà, DNS, MTU.
Àwọn àyẹ̀wò mẹ́fà tí a ṣe ní ìtẹ̀lélẹ́sẹ̀ ló pinnu bóyá VM kan lè jẹ́ ẹnubodè VPN fún olùgbà tirẹ̀. Hypervisor kò ṣe kankan nínú èyí fún ọ: ẹ̀rọ-abẹ́lẹ̀ ni ó ní ọ̀nà-ìsọ̀rọ̀ náà, olùgbà ni ó ní ọ̀nà kan, àti pé nẹ́tíwọ́kì tó wà láàárín wọn jẹ́ ọ̀nà ìsọ̀rọ̀ lasan. Mo ń pa àkójọ yìí mọ́ nítorí pé fífo ìgbésẹ̀ kan kọjá máa ń fúnni ní àmì kan náà, ìdákẹ́jẹ́, níbi tí olùgbà ń ping ẹ̀rọ-abẹ́lẹ̀ pẹ̀lú inú dídùn kò sì dé ibi kankan nínú.
Bẹ̀rẹ̀ pẹ̀lú ìdí. Yálà a máa ń fi kìlìàntì ilé-iṣẹ́ sórí ẹ̀rọ-abẹ́lẹ̀ nìkan ni, tàbí ìlànà máa ń pa á mọ́ níbẹ̀, tó sì yẹ kí o ṣì ní server build ti inú láti olùgbà. Bí a bá gbà olùgbà láàyè láti ní kìlìàntì tirẹ̀, ṣe bẹ́ẹ̀ dípò: ọ̀nà-ìsọ̀rọ̀ kan lórí olùgbà máa ń borí nẹ́tíwọ́kì méjì pẹ̀lú NAT nígbà gbogbo.
Àyẹ̀wò 1: olùgbà nílò ìsopọ̀ tí ó lè fún ní àdírẹ́sì
Olùgbà gbọ́dọ̀ ní ojú-ọ̀nà kan nínú àkópọ̀ kan náà pẹ̀lú adápítà kejì ẹ̀rọ-abẹ́lẹ̀. host-only nínú VirtualBox, host-only tàbí VMnet àkànṣe nínú VMware Workstation, afárá inú tàbí ẹ̀rọ tap nínú QEMU/KVM, àti Internal switch nínú Hyper-V gbogbo wọn yẹ. Ẹ̀rọ-abẹ́lẹ̀ 192.168.56.2, olùgbà 192.168.56.1, àkópọ̀ 192.168.56.0/24 ni ìṣètò tí mo ń lò nínú yàrá-ìdánwò.
Nẹ́tíwọ́kì ipò olùmúlò QEMU (-netdev user, backend SLIRP àkọ́kọ́) àti NAT VirtualBox kùnà pátápátá nínú àyẹ̀wò yìí. Àwọn pákẹ́tì ẹ̀rọ-abẹ́lẹ̀ dé ilé-iṣẹ́ proxy kan lórí olùgbà, nítorí náà olùgbà kò rí ẹ̀rọ tí ó gbé àwọn àdírẹ́sì ẹ̀rọ-abẹ́lẹ̀ rí, kò sì ní ibi láti darí ọ̀nà sí. Default Switch Hyper-V jẹ́ ìtàn kan náà. Bí ping 192.168.56.2 láti olùgbà bá kùnà, dáwọ́ dúró: kò sí ọ̀nà tí a bá fi kún ní ìgbà tó ń bọ̀ tí yóò tún un ṣe.
Àyẹ̀wò 2: ẹ̀rọ-abẹ́lẹ̀ ń gbé kọjá, ó sì ń yí padà
Àwọn pákẹ́tì láti olùgbà dé pẹ̀lú àdírẹ́sì orísun host-only àti ibi-ìlọ inú, nítorí náà ẹ̀rọ-abẹ́lẹ̀ gbọ́dọ̀ gbé wọn kọjá, kí ó sì pa wọ́n mọ́ sẹ́yìn àdírẹ́sì ọ̀nà-ìsọ̀rọ̀ tirẹ̀. Lórí ẹ̀rọ-abẹ́lẹ̀ Linux ìyẹn túmọ̀ sí gbígbé kọjá, orísìí FORWARD accept kan, àti source NAT sí ọ̀nà-ìsọ̀rọ̀:
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -A FORWARD -i eth1 -o tun0 -j ACCEPT
sudo iptables -A FORWARD -i tun0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -o tun0 -j MASQUERADE
Òfin MASQUERADE ni apá tí àwọn ènìyàn máa ń fi sílẹ̀. Àwọn router ilé-iṣẹ́ kì í mọ̀ pé 192.168.56.0/24 wà; pẹ̀lú òfin náà, àwọn server inú rí àdírẹ́sì ọ̀nà-ìsọ̀rọ̀ ẹ̀rọ-abẹ́lẹ̀, wọ́n sì dáhùn sí i, ìdáhùn náà sì rí ọ̀nà padà sí ẹ̀rọ-abẹ́lẹ̀.
Ẹ̀rọ-abẹ́lẹ̀ Windows kò tọ́. IPEnableRouter=1 lábẹ́ SYSTEM\CurrentControlSet\Services\Tcpip\Parameters ń tan gbígbé kọjá ṣíṣẹ́ láìsí ìyípadà, nítorí náà ó ń ṣiṣẹ́ níbi tí ìsọ̀rọ̀-ọ̀nà ilé-iṣẹ́ ti ń darí padà sí àkópọ̀ host-only rẹ nìkan. Internet Connection Sharing ń yí padà, ṣùgbọ́n ó ń tún adápítà tí a pín náà nọ́mbà sí 192.168.137.1, nítorí náà ka àdírẹ́sì tí ó gbà ní ti gidi kí o tó kọ àwọn ọ̀nà olùgbà.
Àyẹ̀wò 3: àwọn ọ̀nà olùgbà ń dárúkọ ẹ̀rọ-abẹ́lẹ̀, kì í ṣe ọ̀nà-ìsọ̀rọ̀
Fi àwọn àkópọ̀ tí olùgbà nílò nìkan kọjá láti inú ẹ̀rọ-abẹ́lẹ̀. Lórí Linux ọ̀nà kan fún àkópọ̀ kọ̀ọ̀kan tó, ó sì ń yí padà dáadáa:
sudo ip route add 10.20.0.0/16 via 192.168.56.2
ip route get 10.20.30.40
Lórí Windows ìbámu ni route add 10.20.0.0 mask 255.255.0.0 192.168.56.2. Fi -p sílẹ̀ nígbà tí o ṣì ń dán wò, kí ọ̀nà búburú lè kú nígbà àtúnbẹ̀rẹ̀, kí o sì fi kún nígbà tí ọ̀nà náà bá ṣiṣẹ́. Má ṣe yọ ọ̀nà àkọ́kọ́ olùgbà kúrò àyàfi bí gbogbo ohun-èlò lórí olùgbà bá gbọ́dọ̀ lò ọ̀nà-ìsọ̀rọ̀; bí ó bá jẹ́ pé ọ̀nà-ìsọ̀rọ̀ kíkún ni ìbéèrè náà, fi àwọn ọ̀nà /1 méjì kún, kí o sì pa ọ̀nà tààrà sí nẹ́tíwọ́kì hypervisor mọ́:
sudo ip route add 0.0.0.0/1 via 192.168.56.2
sudo ip route add 128.0.0.0/1 via 192.168.56.2
Lórí olùgbà Windows, tún yẹ̀wò metiriki ojú-ọ̀nà. Ọ̀nà tí a fi kún nígbà tí adápítà host-only wà ní òdì yóò dúró nínú tábìlì ṣùgbọ́n kò ní gbé ìsọ̀rọ̀ kọjá rí, àti pé adápítà kejì pẹ̀lú metiriki tó kéré lè borí wíwá fún àkópọ̀ kan náà.
Àyẹ̀wò 4: DNS ń tẹ̀lé ọ̀nà, kì í ṣe àkọ́kọ́ ọ̀nà-ìsọ̀rọ̀
Àwọn ọ̀nà ń gbé pákẹ́tì lọ; olùyẹ́nà ni ó ń pinnu irú orúkọ tí ó ń dá pákẹ́tì. Fi olùyẹ́nà ilé-iṣẹ́ mọ́ àgbègbè ilé-iṣẹ́ dípò rírọ́pò olùyẹ́nà olùgbà, kí o sì darí rẹ̀ sí server DNS tí ọ̀nà tuntun ti ń dé. Pẹ̀lú systemd-resolved lórí olùgbà:
resolvectl dns eth1 10.20.0.53
resolvectl domain eth1 '~corp.example.com'
Lórí Windows, àkọsílẹ̀ nínú tábìlì ìlànà ìyẹ́nà-orúkọ ń ṣe iṣẹ́ kan náà: Add-DnsClientNrptRule -Namespace ".corp.example.com" -NameServers 10.20.0.53. Bí ẹ̀rọ-abẹ́lẹ̀ bá ń ṣiṣẹ́ olùyẹ́nà tirẹ̀ lórí àdírẹ́sì host-only, lo àdírẹ́sì yẹn dípò, ṣùgbọ́n lẹ́yìn ìjẹ́rìí pé ó ń dáhùn lórí 192.168.56.2 kì í ṣe lórí loopback.
Lẹ́yìn náà yẹ̀wò MTU kí o tó dá DNS lẹ́bi fún ojú-ìwé tó lọ jẹ́jẹ́. Ojú-ọ̀nà ọ̀nà-ìsọ̀rọ̀ kéré ju ojú-ọ̀nà báìtì 1500 ti olùgbà, nítorí náà olùgbà tí ó ń fi àwọn apá ìwọ̀n kíkún pẹ̀lú bítì DF tan yóò rí wọn tí a sọ nù níbìkan nínú ẹ̀rọ-abẹ́lẹ̀. Àmì àkọ́kọ́ ni ping tó ń ṣiṣẹ́ àti ohun-èlò wẹ́bù inú tí ó dúró lẹ́yìn ìfọwọ́sowọ́pọ̀ TLS. Dín MSS lórí ọ̀nà gbígbé kọjá ẹ̀rọ-abẹ́lẹ̀:
sudo iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Àyẹ̀wò 5: jẹ́rìí láti ẹ̀gbẹ́ méjèèjì
Láti olùgbà, traceroute tàbí tracert sí àdírẹ́sì inú gbọ́dọ̀ fi 192.168.56.2 hàn gẹ́gẹ́ bí ìfò àkọ́kọ́, kì í ṣe ẹnubodè ti ara. Nínú ẹ̀rọ-abẹ́lẹ̀, wo bí ìgbìyànjú kan náà ṣe ń jáde: tcpdump -ni any host 10.20.30.40 ń fi ìbéèrè tí a gbé kọjá hàn ní ẹ̀gbẹ́ host-only àti èyí tí a yí padà lórí ọ̀nà-ìsọ̀rọ̀. Ìbéèrè tí ó jáde, tí ó padà, tí ó sì ṣì fi olùgbà sílẹ̀ ní ìdákẹ́jẹ́ ń tọ́ka sí ọ̀nà ìpadà.
Àìṣe méjì ni ó ṣàlàyé ọ̀pọ̀ jùlọ nínú èyí. Yálà ọ̀nà-ìsọ̀rọ̀ ẹ̀rọ-abẹ́lẹ̀ kò gbé ọ̀nà ìpadà fún àkópọ̀ host-only nítorí pé òfin NAT kù, tàbí ọ̀nà olùgbà ń tọ́ka sí àdírẹ́sì tí ẹ̀rọ-abẹ́lẹ̀ kò ní mọ́ lẹ́yìn àtúnbẹ̀rẹ̀. Tún àwọn àdírẹ́sì kà pẹ̀lú ip -br addr àti ip route get dípò gbígbẹ́kẹ̀lé àwọn àkọsílẹ̀ ìpàdé tó kọjá.
Àyẹ̀wò 6: jẹ́ kí ó lè farada àtúnbẹ̀rẹ̀ àti ìgbéga hypervisor
Pa ìdajì méjèèjì mọ́ títí láé: ìṣètò ọ̀nà netplan tàbí NetworkManager lórí olùgbà, route add ... -p lórí Windows, àti net.ipv4.ip_forward=1 nínú /etc/sysctl.d/ pẹ̀lú àkójọ òfin firewall tí a ń gbé wọlé lẹ́ẹ̀kan sí i nínú ẹ̀rọ-abẹ́lẹ̀. Ya àwòrán ẹ̀rọ-abẹ́lẹ̀ lẹ́sẹ̀kẹsẹ̀ tí ìṣètò bá jẹ́rìí, kí ìmúdójúìwọ̀n kìlìàntì ilé-iṣẹ́ tó ń bọ̀ tó dé.
A ó tún àwọn nẹ́tíwọ́kì host-only nọ́mbà nígbà tí hypervisor bá tún àwọn adápítà rẹ̀ dá, èyí tí ń sọ gbogbo ọ̀nà àti òfin NAT tí a kọ́ lórí 192.168.56.0/24 di asán ní ìdákẹ́jẹ́. Lẹ́yìn ìgbéga, tún àwọn àyẹ̀wò mẹ́ta àkọ́kọ́ ṣe ní ìtẹ̀lélẹ́sẹ̀; ìyẹn gba ìṣẹ́jú kan, ó sì ń mú irú ipò tí olùgbà ṣì ní ọ̀nà rẹ̀ nígbà tí ẹ̀rọ-abẹ́lẹ̀ ti kó lọ sí abẹ́-nẹ́tíwọ́kì tuntun.
IPv6 nílò ìyí tirẹ̀. Àwọn òfin ip6tables, àwọn àkọsílẹ̀ AAAA àti ẹbí ọ̀nà kejì olùgbà kò tẹ̀lé ìṣètò IPv4, iṣẹ́ ilé-iṣẹ́ tí a lè dé nípasẹ̀ IPv6 yóò sì dàbí ẹni tí ó ti bàjẹ́ títí láé nígbà tí IPv4 ń ṣiṣẹ́.
Yóò kọjá tàbí kò ní kọjá, ní ìtẹ̀lélẹ́sẹ̀: olùgbà lè ping àdírẹ́sì host-only ẹ̀rọ-abẹ́lẹ̀; ẹ̀rọ-abẹ́lẹ̀ ń gbé kọjá, ó sì ń ṣe MASQUERADE sí ọ̀nà-ìsọ̀rọ̀; ip route get ń da ẹ̀rọ-abẹ́lẹ̀ padà gẹ́gẹ́ bí ẹnubodè fún àkópọ̀ inú; a ń yanjú àwọn orúkọ ilé-iṣẹ́ nípasẹ̀ olùyẹ́nà tí a fi mọ́; traceroute ń fi ẹ̀rọ-abẹ́lẹ̀ hàn ní àkọ́kọ́; àwọn ìdáhùn mẹ́fà kan náà sì farada àtúnbẹ̀rẹ̀.