Baakadda kontaynkaha weligeed ma gaadho tun0 , oo awood dheeraad ah oo kontaynkaha lagu daro taas ma beddeli doonto. Martida iyo tunnellka dhexdooda waxaa yaalla laba raadin oo dariiq ah: mid ku dhex jira booska magacyada shabakadda martida, mid ku yaal martigeliyaha ka dib marka jirku ku soo dhaco buundada, tan labaadna waxay weyddiisaa shax kale oo leh xeerar isbarbardhig oo kala duwan. Qaabkayga tixraaca waa martigeliyaha Linux oo ay ku shaqeynayso OpenVPN macmiil oo haysta 10.8.0.10 oo ku yaal tun0 , buundo Docker oo ku taal 172.18.0.0/16 , iyo cinwaan gaar ah oo kaliya dhinaca tunnellka gaari karo. Hadafku wuu cidhiidhsan yahay: shabakad-hoosaalka martidaas ayaa ka baxa tunnellka halka martigeliyuhu haysto xiriirkiisa caadiga ah.

Macmiilka VPN ee kontaynkaha dhexdiisa ku socodsiinta waa naqshad kale , ma aha waddo gaaban. Markaas kontaynkuhu wuxuu leeyahay tunnellkiisa iyo aqoonsigiisa, shaqaduna waxay u guureysaa Dockerfile halkii ay ku sii nagaan lahayd iptables.

Gudbintu waxay doorataa dariiq iyadoo eegaysa goobta, ka dibna NAT waxay dib u qortaa isha

Marka la dhigay net.ipv4.ip_forward=1 , baakadda la gudbiyay waxaa loo maraa kaliya goobta, shaxda ugu weyn. Ishu wax kaalin ah kuma laha go'aankaas. Kaliya ka dib marka dariiqda la doorto ayuu kernelku fuliyaa POSTROUTING , halkaasna waxaa ku yaal xeerka Docker ee u gaar ah: -s 172.18.0.0/16 ! -o br-appnet -j MASQUERADE . Wax kasta oo ka taga buundada oo u jeeda interface kale waa la turjumaa, cinwaanka uu noqdaana waxay ku xiran tahay interface-ka uu dariiqdu u dirtay.

Xeerkani wuxuu sharraxaa inta badan calamadaha la i weydiiyo. Haddii shaxda ugu weyn aysan lahayn dariiq loo maro goobta gaarka ah, baakaddu waxay ka baxdaa xiriirka iyadoo sidata cinwaanka jirka ee martigeliyaha. Bixiyahaagu wuu tuuraa goobta, ama goobta fog waxay tuuraysaa isha RFC 1918 oo aanay weligeed filan, kontaynkuna wuu dhacaa waqti inta tunnellku kor yaal oo caafimaad qabo. Qabashada tun0 kama muuqato wax, waana taas calaamadda. Haddii dariiqdu runtii u jeedo tun0 , MASQUERADE waxay dib u qortaa isha 10.8.0.10 , kontaynkii la mid ahaa wuu shaqeeyaa adiga oo aan waxba taaban.

Weydii raadinta sheegta isha martida. La'aanteed from iyo iif martigeliyuhu wuxuu u jawaabaa soketkiisa oo wuxuu soo sheegaa waddo aan baakadda la gudbiyay weligeed qaadan doonin:

ip route get 192.168.11.222 from 172.18.0.5 iif br-appnet

Haddii jawaabtaas sheegto xiriirka, tunnellku sawirka kuma jiro oo wax dejinta dhinaca tunnellka ah ma caawin doonto.

U rar martida cinwaanka tunnellka laftiisa

Beddelka ugu yar ee shaqeeya waa dib-u-qoris cad oo isha ah marka la baxayo. Geli halkii aad ku dari lahayd: Docker wuxuu hore u fadhiyaa madaxa POSTROUTING , sidaas darteed xeer lagu daray -A waxaa lagu qiimeeyaa ka dib xeerka Docker oo weligiis ma shaqeeyo.

iptables -t nat -I POSTROUTING 1 -s 172.18.0.0/16 -o tun0 -j SNAT --to-source 10.8.0.10

Laba shuruud ayaa go'aamisa haddii tan ay sii socon doonto. Cinwaanku waa inuu noqdaa midka macmiilku runtii haysto, sidaas darteed ku dheji diiwaan macmiil kasta oo ka kooban ifconfig-push 10.8.0.10 255.255.255.0 ; xeer sheega cinwaan aan weligeed la qorin waxay soo saartaa tuuris aamusnaan ah, ma aha khalad. Dhinaca fogna waa inuu aqbalaa ishaas oo u celiyaa jawaabaha, taas darteed liiska fasaxa ee halkaas wuxuu sheegaa cinwaanka tunnellka ma aha shabakad-hoosaalka martida. Marka cinwaanka macmiilku uu yahay mid isbeddelaya, -j MASQUERADE oo leh -o tun0 wuxuu raacaa waxa interface-ku haysto, qiimaha siyaasad fog oo aanad ka qori karin qiime go'an.

Shaandhayntu waa qaybta kale. Docker waxay dejisaa siyaasadda FORWARD drop oo waxay nadiifisaa silsiladaha ay leedahay marka daemon-ka dib loo bilaabo, sidaas darteed siyaasadda maxalliga ah geli DOCKER-USER , oo sii noolaanaysa:

iptables -I DOCKER-USER -i br-appnet -o tun0 -j ACCEPT
iptables -I DOCKER-USER -i tun0 -o br-appnet -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Xeerka soo noqoshada waa muhiim: jawaabta timaadda tun0 ee xiriirka buundadu furatay lama aqbalo kaliya sababtoo ah jihada bixitaanka ayaa la aqbalay.

Martigeliyaha ku hay toos xeer isha

Marka buundada oo dhan ay tahay inay isticmaasho tunnellka laakiin wax kale oo martigeliyaha ah aanay isticmaalin, dhaaf NAT oo sii ishaas shaxdeeda. Cinwaannada martida markaas way muuqanayaan bilow ilaa dhammaad.

echo "200 vpnbox" >> /etc/iproute2/rt_tables
ip rule add from 172.18.0.0/16 lookup vpnbox pref 1000
ip route add default dev tun0 table vpnbox

Xeerarka waxaa la tashanaa ka hor shaxda ugu weyn, oo from wuu la mid yahay isha. Baakadaha dibadda ee tunnellka laftiisa waxay sidan isha jirka ee martigeliyaha, sidaas darteed weligood lama mid noqdaan from 172.18.0.0/16 , tunnellkuna isuma mari karo gudaha gudihiisa. Iska-casilkaas ayaa qaabka ka dhigaya mid deggan.

Waddada soo noqoshada hadda waxay u baahan tahay caawimaad. Dhinaca fog wuxuu arkaa 172.18.0.x aan la turjumin oo sabab uma hayo inuu ogaado halka uu ku nool yahay. Serverka, fayl macmiil kasta wuxuu u baahan yahay iroute 172.18.0.0 255.255.0.0 si shaxda gudaha ee serverku u siiyo prefixkaas macmiilkan, iyo route 172.18.0.0 255.255.0.0 la riixay si macmiillada kale ay ogaadaan inuu jiro.

Laba hubin ka hor inta aadan aammin. Socodsii ip route show default : oo leh redirect-gateway def1 shaxdu waxay haysataa 0.0.0.0/1 iyo 128.0.0.0/1 iyada oo loo marayo tun0 , martigeliyuhuna gabi ahaanba toos ma aha, sababtoo ah nus-default-yadaas waxay guuleystaan iyagoon beddelin default . Xeerarka lagu daray ip rule add sidoo kale way lunto marka dib loo bilaabo, sidaas darteed ku qaado skript up.

Cabbirka baakaddu waa guuldarada labaad ee aad la kulanto

Interface buundo 1500 byte ah waxay tunnellka siisaa in ka badan inta uu qaadi karo marka madaxyada UDP iyo IP ee dibadda lagu daro. Isweydaarsiyada yaryar way maraan, sidaas darteed DNS wuu xallimaa oo gacan-qabsiga TLS wuu dhammaadaa, ka dibna upload weyn ayaa ku lalma meel kasta khalad la'aan. Diriyuhu wuxuu ku celceliyaa isla cabbirka segmentka sababtoo ah fariinta ICMP ee ku saabsan baahida kala-goysnaanta, oo u sheegi lahayd inuu yareeyo, weligeed ma timaaddo.

Ku hagaaji interface-ka, MSS, ama labadaba. Xajintu uma baahna iskaashi martida:

ip link set dev tun0 mtu 1400
iptables -t mangle -A FORWARD -o tun0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Xajintu waxay dib u qortaa kaliya TCP. UDP, oo ay ku jirto QUIC, waxay u baahan tahay beddelkeeda interface marti hooseeya, oo leh --opt com.docker.network.driver.mtu=1400 marka shabakadda la abuurayo ama furaha compose ee u dhigma.

DNS iyo hubinta mudan in la celceliyo

Xallinta magacyadu waxay raacdaa isla waddada. Resolver-ka Docker ku dhex jira 127.0.0.11 wuxuu u gudbiyaa serverada martigeliyaha ee la habeeyay, sidaas darteed kontaynkuhu wuxuu dhaxlaa waxa martigeliyuhu isticmaalo. Marka aagga gaarka ah ay ka jawaabto kaliya resolver laga gaari karo tunnellka, u jeedi martida cinwaankaas, oo ku tijaabi getent hosts gudaha kontaynkaha halkii aad ka tijaabin lahayd martigeliyaha.

  • Socodsii codsiga guuldarraysta gudaha martida; tijaabada dhinaca martigeliyaha waxay isticmaashaa cinwaan isha kale oo waxay qarinaysaa dhibaatada.
  • Akhri tirooyinka xeerarka NAT iyo shaandhaynta ee aad ku dartay. Xeer aan lahayn wax isbarbardhig ah waa khalad dariiq, ma aha khalad siyaasad.
  • Xaqiiji in cinwaanka tunnellka ee xeerkaaga SNAT uu yahay midka macmiilku runtii haysto.
  • Hoos u dhig MTU martida ama xaji MSS ka hor inta aadan serverka ku eedeyn hakad.

Hoos u soco liiska oo ku joogso guuldarada ugu horreysa. Lakabkaas ayaa lagu hagaajinayaa; wax kasta oo hoos lagu daro waxay qarinayaa oo kaliya xadka jabaya.

Maqaallo la xiriira