Conas trácht coimeádán Docker amháin a ródú trí OpenVPN
Coinnigh an t-óstach ar a ghnáth-uplink agus cuir fomhreanga coimeádán amháin sa tollán: ord NAT, rialacha foinse, iroute OpenVPN agus seiceálacha MSS.
Ní shroicheann paicéad an choimeádáin tun0 riamh, agus ní athróidh cumais bhreise ar an gcoimeádán é sin. Tá dhá chuardach róid idir an t-aoi agus an tollán: ceann laistigh de spás ainmneacha líonra an aoi, ceann ar an óstach tar éis don fhráma teacht i dtír ar an droichead, agus féachann an dara ceann ar thábla eile le rialacha meaitseála eile. Is é mo leagan tagartha óstach Linux a ritheann OpenVPN cliant a choinníonn 10.8.0.10 ar tun0, droichead Docker ar 172.18.0.0/16, agus seoladh príobháideach nach féidir le taobh an tolláin amháin a shroicheadh. Fanann an sprioc cúng: téann an fomhreanga aoi sin amach tríd an tollán agus coinníonn an t-óstach a ghnáth-uplink.
Is dearadh eile é an cliant VPN a rith laistigh den choimeádán, ní aicearra. Ansin is leis an gcoimeádán a thollán agus a dhintiúir, agus bogann an obair isteach i Dockerfile in ionad fanacht in iptables.
Roghnaíonn an t-ardú róid de réir cinn scríbe, ansin athscríobhann NAT an fhoinse
Nuair a bhíonn net.ipv4.ip_forward=1 socraithe, déantar paicéad ardaithne a ródú de réir cinn scríbe amháin, sa phríomhthábla. Níl aon pháirt ag an bhfoinse sa chinneadh sin. Ní ach tar éis an ród a roghnú a ritheann an t-eithne POSTROUTING, agus sin an áit a bhfuil riail Docker féin: -s 172.18.0.0/16 ! -o br-appnet -j MASQUERADE. Aistrítear gach rud a fhágann an droichead go comhéadan eile, agus braitheann an seoladh a n-éiríonn sé air an gcomhéadan ar sheol an ród é.
Míníonn an riail sin an chuid is mó de na siomptóim a chuirtear orm. Mura bhfuil ród sa phríomhthábla don cheann scríbe príobháideach, fágann an paicéad an t-uplink ag iompar sheoladh fisiceach an óstaigh. Caitheann do sholáthraí an ceann scríbe, nó caitheann an láithreán cianda foinse RFC 1918 nach raibh súil aige léi, agus téann an coimeádán thar am agus an tollán fós suas agus sláintiúil. Ní thaispeánann gabháil ar tun0 faic, agus sin é an leid. Má dhíríonn an ród ar tun0 i ndáiríre, athscríobhann MASQUERADE an fhoinse go 10.8.0.10 agus oibríonn an coimeádán céanna gan duit aon rud a bhaint.
Iarr an chuardach a ainmníonn foinse an aoi. Gan from agus iif freagraíonn an t-óstach dá shoc ó féin agus tuairiscíonn sé cosán nach nglacfaidh an paicéad ardaithne riamh:
ip route get 192.168.11.222 from 172.18.0.5 iif br-appnetMá ainmníonn an freagra sin an t-uplink, níl an tollán sa phictiúr agus ní chabhróidh aon socrú ar thaobh an tolláin.
Bog an t-aoi go seoladh féin an tolláin
Is é an t-athrú is lú a oibríonn ná athscríobh follasach foinse ar an mbealach amach. Cuir isteach é seachas é a chur leis: tá Docker ina shuí cheana ag ceann POSTROUTING, mar sin déantar riail a chuirtear leis -A a mheas taobh thiar de riail Docker agus ní scaoiltear riamh í.
iptables -t nat -I POSTROUTING 1 -s 172.18.0.0/16 -o tun0 -j SNAT --to-source 10.8.0.10Cinneann dhá choinníoll an seasfaidh sé seo. Caithfidh an seoladh a bheith ar cheann atá ag an gcliant i ndáiríre, mar sin pionnáil le iontráil in aghaidh an chliaint ina bhfuil ifconfig-push 10.8.0.10 255.255.255.0; cruthaíonn riail a ainmníonn seoladh nár leithdháileadh riamh scitíní ciúine, ní earráid. Agus caithfidh an taobh cianda an fhoinse sin a ghlacadh agus freagraí a ródú ar ais, agus sin an fáth a n-ainmníonn liosta ceadaithe ansin seoladh an tolláin seachas fomhreanga an aoi. Nuair a bhíonn seoladh an chliaint dinimiciúil, -j MASQUERADE le -o tun0 leanann sé an rud atá ag an gcomhéadan, ar chostas polasaí cianda nach féidir leat luach seasta a scríobh ina choinne.
Is é an scagadh an leath eile. Socraíonn Docker an polasaí FORWARD ar drop agus glanann sé na slabhraí atá aige ag gach atosú démon, mar sin cuir polasaí áitiúil i DOCKER-USER, a mhaireann:
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 ACCEPTTá an riail tuairisce tábhachtach: ní ghlactar le freagra a thagann ar tun0 do nasc a d'oscail an droichead díreach mar gheall gur glacadh leis an treo amach.
Coinnigh an t-óstach díreach le riail foinse
Nuair ba cheart don droichead iomlán an tollán a úsáid ach níor cheart d'aon rud eile ar an óstach, scipeáil NAT agus tabhair a thábla féin don fhoinse sin. Fanann seoltaí aoi infheicthe ó cheann go ceann ansin.
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 vpnboxCeaptar rialacha roimh an bpríomhthábla, agus from meaitseálann an fhoinse. Iompraíonn paicéid sheachtracha an tolláin féin foinse fhisiceach an óstaigh, mar sin ní mheaitseálann siad from 172.18.0.0/16 choíche agus ní féidir leis an tollán é féin a ródú ar ais isteach ann féin. Is é an féin-eisiamh sin a dhéanann an leagan seasmhach.
Tá cabhair ag teastáil ón gcosán tuairisce anois. Feiceann an taobh cianda 172.18.0.x gan aistriú agus níl cúis ar bith aige a fháil amach cá bhfuil sé ina chónaí. Ar an bhfreastalaí, teastaíonn ó chomhad in aghaidh an chliaint iroute 172.18.0.0 255.255.0.0 ionas go dtabharfaidh tábla inmheánach an fhreastalaí an réimír sin don chliaint seo, agus route 172.18.0.0 255.255.0.0 brúite ionas go mbeidh a fhios ag cliaint eile go bhfuil sé ann.
Dhá sheiceáil sula gcuirfidh tú muinín ann. Rith ip route show default: le redirect-gateway def1 tá 0.0.0.0/1 agus 128.0.0.0/1 sa tábla trí tun0, agus níl an t-óstach díreach ar chor ar bith, mar bhuaileann na leath-réamhshocruithe sin gan default a ionadú. Imíonn rialacha a chuirtear le ip rule add freisin ar atosú, mar sin iompair iad i script up.
Is é méid an phaicéid an dara teip a chastar ort
Tugann comhéadan droichid ag 1500 beart níos mó don tollán ná mar is féidir leis a iompar nuair a chuirtear na ceanntásca UDP agus IP seachtracha leis. Éiríonn le malartuithe beaga, mar sin réitíonn DNS agus críochnaíonn an chroitheadh láimhe TLS, ansin crochann uaslódáil níos mó gan aon earráid áit ar bith. Leanann an seoltóir ag athrá an mhéid chéanna deighleog mar ní thagann an teachtaireacht ICMP faoi ghá ilroinnte, a déarfadh leis laghdú, riamh.
Deisigh é ag an gcomhéadan, ag an MSS, nó ag an dá rud. Ní gá don aoi comhoibriú leis an gcliampáil:
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-pmtuNí athscríobhann an chliampáil ach TCP. Teastaíonn ó UDP, QUIC san áireamh, comhéadan aoi níos ísle ina ionad, le --opt com.docker.network.driver.mtu=1400 ag cruthú líonra nó an eochair compose chomhfhreagrach.
DNS agus na seiceálacha is fiú a athrá
Leanann réiteach ainmneacha an chosán céanna. Seolann réiteoir leabaithe Docker ag 127.0.0.11 chuig freastalaithe cumraithe an óstaigh, mar sin faigheann coimeádán an rud a úsáideann an t-óstach. Nuair nach bhfreagraítear an crios príobháideach ach ag réiteoir atá inrochtana tríd an tollán, dírig an t-aoi chuig an seoladh sin, agus tástáil le getent hosts laistigh den choimeádán seachas ar an óstach.
- Rith an t-iarratas a theipeann laistigh den aoi; úsáideann tástáil ar thaobh an óstaigh seoladh foinse eile agus cealaíonn sé an fhadhb.
- Léigh na cuntair ar na rialacha NAT agus scagtha a chuir tú leis. Is botún ródaithe é riail gan meaitseáil ar bith, ní botún polasaí.
- Deimhnigh gurb é seoladh an tolláin i do riail SNAT ceann atá ag an gcliant i ndáiríre.
- Ísligh MTU an aoi nó cliampáil MSS sula gcuire tú an milleán ar an bhfreastalaí as stop.
Oibrigh síos an liosta sin agus stop ag an gcéad teip. Is é an ciseal sin an ceann is gá a dheisiú; ní chealaíonn aon rud a chuirtear níos faide síos ach an teorainn atá ag briseadh.