Il-pakkett tal-kontenitur qatt ma jasal għand tun0 u kapaċitajiet addizzjonali fuq il-kontenitur mhux se jbiddlu dan. Bejn il-mistieden u l-mina hemm żewġ tfittxijiet tar-rotta: waħda ġewwa l-ispazju tal-ismijiet tan-netwerk tal-mistieden, waħda fuq il-host wara li l-qafas jinżel fuq il-pont, u t-tieni tikkonsulta tabella differenti b'regoli ta' qbil differenti. Il-qafas ta' referenza tiegħi huwa host Linux li jħaddem OpenVPN klijent li jżomm 10.8.0.10 fuq tun0, pont Docker fuq 172.18.0.0/16, u indirizz privat li jista' jilħaq biss in-naħa tal-mina. L-għan jibqa' dejjaq: dak is-subnet tal-mistieden joħroġ mill-mina waqt li l-host iżomm l-uplink tas-soltu tiegħu.

It-tħaddim tal-klijent VPN ġewwa l-kontenitur huwa disinn differenti, mhux qasma. Imbagħad il-kontenitur jippossjedi l-mina u l-kredenzjali tiegħu, u x-xogħol jiċċaqlaq għal Dockerfile minflok jibqa' f'iptables.

L-indirizzar 'il quddiem jagħżel rotta skont id-destinazzjoni, imbagħad in-NAT jerġa' jikteb is-sors

Meta huwa stabbilit net.ipv4.ip_forward=1 , pakkett indirizzat 'il quddiem jiġi dirett skont id-destinazzjoni biss, fit-tabella prinċipali. Is-sors m'għandu ebda rwol f'dik id-deċiżjoni. Biss wara li tintgħażel ir-rotta l-qalba tħaddem POSTROUTING , u hemmhekk tinsab ir-regola tal-Docker stess: -s 172.18.0.0/16 ! -o br-appnet -j MASQUERADE . Kull ħaġa li tħalli l-pont għal interface oħra tiġi tradotta, u l-indirizz li jsir jiddependi mill-interface li r-rotta bagħtitu lejha.

Din ir-regola tispjega ħafna mis-sintomi li jiġu mistoqsija lili. Jekk it-tabella prinċipali m'għandhiex rotta għad-destinazzjoni privata, il-pakkett joħroġ mill-uplink billi jġorr l-indirizz fiżiku tal-host. Il-fornitur tiegħek jiskarta d-destinazzjoni, jew is-sit imbiegħed jiskarta sors RFC 1918 li qatt ma stenna, u l-kontenitur jaqbeż il-ħin waqt li l-mina tibqa' 'l fuq u sana. Qbid fuq tun0 ma juri xejn, u dik hija l-indikazzjoni. Jekk ir-rotta tassew turi lejn tun0 , MASQUERADE jerġa' jikteb is-sors għal 10.8.0.10 , u l-istess kontenitur jaħdem mingħajr ma tmiss xejn.

Itlob it-tfittxija li ssemmi s-sors tal-mistieden. Mingħajr from u iif il-host iwieġeb għas-socket tiegħu stess u jirrapporta triq li l-pakkett indirizzat 'il quddiem qatt ma jieħu:

ip route get 192.168.11.222 from 172.18.0.5 iif br-appnet

Jekk dak it-tweġiba ssemmi l-uplink, il-mina mhix fl-istampa u l-ebda konfigurazzjoni fin-naħa tal-mina ma tgħin.

Mexxi l-mistieden għall-indirizz tal-mina stess

L-iżgħar bidla li taħdem hija kitba mill-ġdid espliċita tas-sors meta toħroġ. Daħħalha minflok ma żżidha: Docker diġà qiegħed fil-bidu ta' POSTROUTING , għalhekk regola miżjuda b' -A tiġi vvalutata wara dik tal-Docker u qatt ma tiskatta.

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

Żewġ kundizzjonijiet jiddeċiedu jekk dan jibqax. L-indirizz irid ikun wieħed li l-klijent tassew għandu, għalhekk ippinjah b'rekord għal kull klijent li jkun fih ifconfig-push 10.8.0.10 255.255.255.0 ; regola li ssemmi indirizz li qatt ma ngħata tipproduċi twaqlgħat siekta, mhux żball. U n-naħa l-bogħoda trid taċċetta dak is-sors u ddawwar it-tweġibiet lura, għalhekk il-lista tal-permessi hemmhekk issemmi l-indirizz tal-mina u mhux is-subnet tal-mistieden. Meta l-indirizz tal-klijent ikun dinamiku, -j MASQUERADE ma' -o tun0 isegwi dak li għandu l-interface, bi prezz ta' politika remota li kontriha ma tistax tikteb valur fiss.

Il-filtrazzjoni hija n-nofs l-ieħor. Docker jistabbilixxi l-politika FORWARD fuq drop u jnaddaf il-ktajjen li jippossjedi f'kull restard tad-daemon, għalhekk qiegħed politika lokali f' DOCKER-USER , li tgħix:

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

Ir-regola tar-ritorn hija importanti: tweġiba li tasal fuq tun0 għal konnessjoni miftuħa mill-pont mhijiex aċċettata biss għax id-direzzjoni 'l barra kienet.

Żomm il-host dirett b'regola tas-sors

Meta l-pont kollu għandu juża l-mina imma xejn ieħor fuq il-host ma għandu, aqbeż in-NAT u agħti lil dak is-sors it-tabella tiegħu. L-indirizzi tal-mistiedna mbagħad jibqgħu viżibbli mill-bidu sat-tmiem.

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

Ir-regoli jiġu kkonsultati qabel it-tabella prinċipali, u from jaqbel mas-sors. Il-pakketti ta' barra tal-mina stess iġorru s-sors fiżiku tal-host, għalhekk qatt ma jaqblu ma' from 172.18.0.0/16 , u l-mina ma tistax iddawwar lilha nnifisha lura fiha nnifisha. Dan l-awtoesklużjoni huwa dak li jagħmel il-qafas stabbli.

It-triq tar-ritorn issa teħtieġ għajnuna. In-naħa l-bogħoda tara 172.18.0.x mhux tradott u m'għandhiex raġuni tkun taf fejn tgħix. Fuq is-server, fajl għal kull klijent jeħtieġ iroute 172.18.0.0 255.255.0.0 sabiex it-tabella interna tas-server tagħti dak il-prefiss lil dan il-klijent, u route 172.18.0.0 255.255.0.0 imbuttat sabiex klijenti oħra jkunu jafu li jeżisti.

Żewġ kontrolli qabel ma tafdah. Mexxi ip route show default : ma' redirect-gateway def1 it-tabella żżomm 0.0.0.0/1 u 128.0.0.0/1 permezz ta' tun0 , u l-host mhuwiex dirett xejn, għax dawk in-nofs default jirbħu mingħajr ma jissostitwixxu default . Regoli miżjuda b' ip rule add ukoll jisparixxu fir-restard, għalhekk ġorruhom fi skript up.

Id-daqs tal-pakkett huwa t-tieni falliment li tiltaqa' miegħu

Interface tal-pont f'1500 byte tagħti lill-mina aktar milli tista' ġġorr meta jiżdiedu l-intestaturi UDP u IP ta' barra. Skambji żgħar jgħaddu, għalhekk DNS jiġi solvut u l-handshake TLS jitlesta, imbagħad upload akbar jiddendel mingħajr ebda żball imkien. Il-mittent ikompli jtenni l-istess daqs tas-segment għax il-messaġġ ICMP dwar il-ħtieġa tal-frammentazzjoni, li kien jgħidlu jnaqqas, qatt ma jasal.

Sejjah fuq l-interface, fuq l-MSS, jew it-tnejn. L-għafis m'għandux bżonn il-kooperazzjoni tal-mistieden:

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

L-għafis jerġa' jikteb biss TCP. UDP, inkluż QUIC, minflok jeħtieġ interface tal-mistieden aktar baxx, b' --opt com.docker.network.driver.mtu=1400 fil-ħolqien tan-netwerk jew iċ-ċavetta compose li taqbel.

DNS u l-kontrolli li jixirqu jitwettqu mill-ġdid

Ir-riżoluzzjoni tal-ismijiet issegwi l-istess triq. Ir-resolver inkorporat ta' Docker fuq 127.0.0.11 jgħaddi lis-servers konfigurati tal-host, għalhekk kontenitur jiret dak li juża l-host. Meta ż-żona privata tiġi mwieġba biss minn resolver li jintlaħaq mill-mina, indirizza l-mistieden għal dak l-indirizz, u ttestja b' getent hosts ġewwa l-kontenitur u mhux fuq il-host.

  • Mexxi t-talba li tfalli ġewwa l-mistieden; test fin-naħa tal-host juża indirizz tas-sors differenti u jaħbi l-problema.
  • Aqra l-kontaturi fuq ir-regoli tan-NAT u tal-filtru li żidt. Regola mingħajr ebda qbil hija żball fl-indirizzar, mhux żball ta' politika.
  • Ikkonferma li l-indirizz tal-mina fir-regola SNAT tiegħek huwa wieħed li l-klijent tassew għandu.
  • Baxxi l-MTU tal-mistieden jew għafas l-MSS qabel ma tagħti t-tort lis-server għal waqfa.

Mexxi dik il-lista 'l isfel u waqaf fl-ewwel falliment. Dik is-saff hija dik li trid tiġi msewwija; kull ma jiżdied aktar 'l isfel jaħbi biss il-fruntiera li tkisser.

Artikli relatati