Mwenyeji huvinjari kupitia handaki na kontena lililo kando halifikii chochote. Kuchapisha mlango kutoka kontena linaloendesha mteja wake wa VPN ni mbaya zaidi: ombi hufika na jibu haliwezi kutoka. Yote ni maamuzi ya njia kwenye mwenyeji, na Docker ni mjumbe tu.

Maswali matatu huamua ni ipi kati ya hali hizo mbili unayoangalia, na huchukua kama dakika moja.

Hitilafu mbili zinazoonekana sawa

Ya kwanza ni tatizo la njia ya kurudi. Mlango uliochapishwa hutafsiriwa ndani ya kontena, ombi hufika, na jibu huelekezwa kwa njia chaguo-msingi ya mwenyeji, ambayo OpenVPN mteja ameielekeza kwenye tun0. Jibu hutoka kwenye anwani ambayo mwenzake wa mbali haitarajii, na hutupwa. Ya pili ni mgongano wa kiambishi: daraja chaguo-msingi la Docker linamiliki 172.17.0.0/16 na handaki la kampuni husukuma masafa hayo hayo.

Moja hurekebishwa kwa jedwali la njia, nyingine kwa kuhesabu upya daraja. Kuhariri kabla ya kujua lipi ni lipi ndiyo njia ya kuvunja kontena linalofanya kazi.

Amua kwa maswali matatu

Swali la kwanza: hitilafu inatoweka unaposimamisha VPN? Ikiwa kila kitu kinafanya kazi handaki likiwa limezimwa, shuku njia ya kurudi. Swali la pili: je, ip route show table all huorodhesha kiambishi kimoja mara mbili, mara moja kwenye daraja na mara moja kwenye tun0? Hilo ndilo gongano. Swali la tatu: anwani iliyoathirika ni kontena, mgeni wa NAT au mgeni aliyedaraishwa?

Swali la tatu ni muhimu kwa sababu kila moja lina marekebisho sahihi tofauti, na kutumia marekebisho ya kontena kwa mgeni wa libvirt hupoteza jioni nzima.

ip route
ip route show table all | grep -E '172\.1[7-9]|10\.8'
docker network inspect bridge --format '{{.IPAM.Config}}'

Njia ya kurudi: jedwali la anwani moja ya chanzo

Wakati trafiki ya kontena inapaswa kutoka kupitia kiolesura cha kimwili wakati mwenyeji mwenyewe anatumia handaki, uelekezaji wa njia kwa msingi wa chanzo ni badiliko dogo zaidi. Ongeza kanuni inayolingana na anwani ya kontena na uitume kwenye jedwali maalum. Hakuna kingine kwenye mwenyeji kinachosogea.

ip rule add from 172.22.0.3 lookup 10
ip route add default via 172.22.0.1 table 10

Kila pakiti ambayo chanzo chake ni anwani hiyo huangalia kwanza jedwali 10, na jedwali 10 huituma kwenye lango la daraja badala ya handaki.

Thibitisha kwa ip route get 1.1.1.1 from 172.22.0.3. Jibu lazima litaje kiolesura cha daraja, si tun0. Kanuni zilizoongezwa kwa namna hii hupotea unapowasha upya, kwa hiyo ziweke kwenye unit au ndoano ya mtandao inayomiliki kontena.

Mfumo huo huo hufanya kazi kwa kontena la WireGuard, ambapo njia ya jibu pia inahitaji kanuni wazi.

Mgongano wa kiambishi: hesabu upya daraja

Jedwali la njia hutuma kiambishi kimoja mahali pamoja. Ikiwa VPN inasukuma 172.17.0.0/16 wakati daraja la Docker tayari liko hapo, metriki ndogo hushinda: Docker huweka njia yake iliyounganishwa kwenye metriki 0, na njia iliyosukumwa hufika kwa 50. Wakati huo handaki huonekana limevunjika wakati Docker inaendelea kufanya kazi, au kinyume chake, kulingana na mpangilio wa usanidi. Hesabu upya daraja badala ya kupigana na metriki.

{
  "bip": "10.200.0.1/24",
  "default-address-pools": [{"base": "10.201.0.0/16", "size": 24}]
}

Anzisha upya Docker baada ya badiliko na tengeneza upya mitandao iliyojengwa na bwawa la zamani. Kubadilisha metriki huhamisha mgogoro hadi uzinduzi unaofuata tu.

VM zinahitaji jibu lingine tena

Mgeni wa libvirt kwenye mtandao chaguo-msingi wa NAT hurithi uelekezaji wa mwenyeji na huacha kufikia nje mara handaki la mwenyeji linapomiliki njia chaguo-msingi. Kuhamisha mgeni kwenda kifaa cha daraja au macvtap humpa njia yake mwenyewe kwenye mtandao wa kimwili. Katika virt-manager ongeza maunzi, chagua Network, weka chanzo kwenye kifaa cha mwenyeji cha macvtap, weka virtio kama modeli, kisha zima kiolesura cha zamani cha NAT.

Mgeni wa macvtap kwa kawaida hawezi kufikia mwenyeji wake mwenyewe. Hiyo ni tabia inayotarajiwa na si hitilafu, na inapaswa kuwa kwenye kumbuka unaloacha.

Kwa mgeni anayehitaji LAN ya mwenyeji pekee, mteja wa muuzaji anaweza kuwa na swichi inayokosekana: kwa Mullvad, mullvad lan set allow hurejesha ufikivu wa ndani bila kugusa libvirt. Na kontena linapopaswa kufikiwa kwa handaki pekee, funga mlango uliochapishwa kwenye anwani ya handaki, -p 10.8.0.5:8080:8080, badala ya kuuchapisha kwenye kila anwani.

Makala zinazohusiana