Maeneo yote mawili yanatumia masafa sawa ya LAN, na mwingiliano si kitu kinachovunja muundo kwa kweli. Kitovu kinapaswa kuchagua eneo kwa kutumia anwani ya lengo pekee, na malengo mawili yanayofanana hayakipi chochote cha kuchagua. Kuweka nambari mpya ofisini inayofanya kazi ili kutosheleza handaki kwa kawaida ni ubadilishanaji mbaya kuliko kumpa kila huduma iliyochapishwa anwani tofauti ambayo handaki inaweza kuibeba. Muundo hapa chini unachapisha huduma moja ya HTTPS kwa kila eneo na hakuna kingine.

Kwa nini mwingiliano si tatizo la kweli

WireGuard hupeleka kwa lengo: AllowedIPs za peer huamua ni peer gani itakayopokea pakiti. Peer mbili haziwezi zote kutangaza 10.10.7.0/24 bila mmoja wao kushinda kila utafutaji. Hiyo ni sifa ya jedwali la peer, si ya handaki, ndiyo sababu suluhisho hapa ni mpango wa anwani, si hila ya uelekezaji.

Mpango ni kuacha kabisa kutangaza LAN. Badala yake tangaza alias kwa kila huduma, anwani moja kwa kila eneo, na lango la kila eneo litafsiri alias hiyo kwenye programu yake halisi.

Mtumiaji huelekeza anwani mbili za kipekee, haoni kamwe kiambishi kabambe, na hakuna kinachobadilika katika ofisi zote mbili. Hii pia inataja mpaka kwa uaminifu: unachapisha huduma moja ya HTTPS kutoka kila eneo, huna kuunganisha mitandao miwili. Kanuni zinazofuata zinabaki ndogo kwa sababu tamko ni dogo. Tamko pana lingehitaji kanuni pana, na hivyo ndivyo miundo hii inavyokuwa ngumu.

Ipe kila eneo alias ambayo mtumiaji anaweza kuelekeza

Chagua anwani kutoka masafa ambayo hayagongani na kitu chochote kwenye mashine ya mtumiaji, kitovu au mojawapo ya LAN mbili. Hapa kitovu ni 10.66.0.1, mtumiaji ni 10.66.0.10, malango ni 10.66.0.21 na 10.66.0.22, na alias mbili ni 10.77.1.20 na 10.77.2.20. Kitovu huchapisha kila alias kupitia peer inayoimiliki, kwa hiyo pakiti inayotoka iliyoelekezwa kwa alias moja inaweza kutoka tu kupitia eneo linalolingana:

[Interface]
Address = 10.66.0.1/32
ListenPort = 51820
PrivateKey = HUB_KEY

[Peer]
PublicKey = USER_PUBLIC_KEY
AllowedIPs = 10.66.0.10/32

[Peer]
PublicKey = SITE_A_PUBLIC_KEY
AllowedIPs = 10.66.0.21/32, 10.77.1.20/32

[Peer]
PublicKey = SITE_B_PUBLIC_KEY
AllowedIPs = 10.66.0.22/32, 10.77.2.20/32

Upande wa mtumiaji unahitaji alias mbili tu, jambo ambalo hulinda usanidi wa mteja kutoka viambishi vyote viwili vya LAN. Hakuna kitu katika usanidi huo kinachotaja LAN yoyote halisi:

[Interface]
Address = 10.66.0.10/32
PrivateKey = USER_KEY

[Peer]
PublicKey = HUB_PUBLIC_KEY
Endpoint = hub.example.net:51820
AllowedIPs = 10.77.1.20/32, 10.77.2.20/32
PersistentKeepalive = 25

Kila lango hutangaza kitovu na chanzo cha mtumiaji, hakuna kingine, kwa hiyo eneo haliwezi kamwe kujifunza LAN ya eneo lingine. Keepalive hudumisha ramani ya NAT kwenye uplink ya eneo; hairuhusu trafiki, na ngome bado huamua kinachokubaliwa. Kunakili usanidi wa lango moja hadi lingine ni sawa mradi ufunguo wa faragha, anwani ya kiolesura na alias vyote vinabadilika.

Kitovu kinapaswa kuruhusu nini kati ya peer zake mbili

Kitovu hupeleka pakiti kati ya peer zake mbili, hilo ni uamuzi katika mnyororo wa forward na si uamuzi wa pembejeo. Wezesha upelekaji wa IPv4 kupitia utaratibu wa kawaida wa jukwaa, kisha ruhusu jozi hasa ambazo muundo unahitaji.

Kanuni hapa chini inamruhusu mtumiaji alias moja na bandari moja, na inaruhusu trafiki inayorejea kupitia ufuatiliaji wa miunganisho. Inatupa kila kitu kingine kwenye njia ya forward, na hilo ndilo wazo:

nft add table inet hub_transit
nft add chain inet hub_transit forward '{ type filter hook forward priority 0 ; policy drop ; }'
nft add rule inet hub_transit forward ct state established,related accept
nft add rule inet hub_transit forward iifname wg0 oifname wg0 tcp dport 443 ip saddr 10.66.0.10 ip daddr 10.77.1.20 accept

Maelezo mawili yanastahili kutajwa kwa sababu husababisha hitilafu za kimya. Accept katika mnyororo mmoja wa msingi haibatilishi drop katika mwingine, kwa hiyo unganisha hii na sera iliyopo badala ya kuipakia kando. Na anwani ya chanzo hutambua kifaa, si mtu; weka uthibitishaji wa programu kando na ukubalifu wa mtandao.

Mahali ambapo alias inakuwa anwani halisi

Eneo A hupokea ombi la 10.77.1.20, huandika upya lengo hadi programu halisi, na huandika upya chanzo hadi anwani yake ya LAN ili jibu liweze kurudi bila njia ya kuelekea handaki. Kufanya tafsiri zote mbili mahali pamoja hukuweka mtandao uliobaki katika hali ya kutojua alias. Kanuni hapa chini ni utaratibu wote:

nft add table ip site_a_nat
nft add chain ip site_a_nat pre '{ type nat hook prerouting priority -100 ; policy accept ; }'
nft add chain ip site_a_nat post '{ type nat hook postrouting priority 100 ; policy accept ; }'
nft add rule ip site_a_nat pre iifname wg0 tcp dport 443 ip saddr 10.66.0.10 ip daddr 10.77.1.20 dnat to 10.10.7.20:443
nft add rule ip site_a_nat post iifname wg0 oifname lan0 tcp dport 443 ip saddr 10.66.0.10 ip daddr 10.10.7.20 snat to 10.10.7.2

Kisha sera ya forward ya eneo A inapaswa kuruhusu mtiririko uliotafsiriwa kutoka kiolesura cha handaki hadi kiolesura cha LAN, pamoja na mwelekeo wa kurudi. Hook ya forward huona lengo baada ya tafsiri ya lengo na kabla ya kuandika upya chanzo, ndiyo sababu kanuni inataja anwani ya programu halisi. Soma hook hizo mbili kwa mpangilio huo kila kanuni inapodhaniwa kutolingana na chochote. Kanuni ya forward iliyoandikwa dhidi ya alias haiwezi kamwe kulingana, kwa sababu alias haipo tena kwenye hook hiyo.

Eneo B hurudia hili kwa alias yake na ufunguo wake. Haipaswi kutumia tena ufunguo wa faragha wa eneo A, kwa sababu peer mbili zinazoshiriki utambulisho mmoja ni hitilafu ya usanidi ambayo ni vigumu kuiona na rahisi kuunda kwa kunakili faili. Weka hati zote mbili za lango sawa isipokuwa thamani ambazo lazima zitofautiane, ili tofauti ionekane wazi wakati wa mapitio. Faili iliyonakiliwa ndiyo chanzo cha kawaida cha hitilafu hiyo.

Kuandika upya chanzo kuna gharama. Programu huona lango kama mteja wake, kwa hiyo kumbukumbu zake hazionyeshi tena mtumiaji gani aliunganishwa. Hifadhi njia ya ukaguzi ya lango, na usidhoofishe kuingia kwa programu ili kufidia utambulisho wa mtandao ambao tafsiri iliondoa.

Jinsi ya kuthibitisha kwamba majina yote mawili yaliyochapishwa yanajibu

Ipe kila alias jina la DNS na usanidi programu na cheti kwa jina hilo, kwa sababu tafsiri haiandiki upya uelekezaji upya au URL kamili zilizopachikwa. Tumia jina moja kwa kila eneo ili kutokulingana kwa cheti kusionekane kama hitilafu ya uelekezaji.

Jaribu kutoka kwa mteja halisi, thibitisha ni eneo gani lilijibu, na jaribu pia bandari isiyoruhusiwa. Tumia miunganisho mipya baada ya mabadiliko yoyote ya NAT, kwa sababu hali iliyoanzishwa huhifadhi ramani ya zamani:

wg show wg0 allowed-ips
sudo nft list ruleset
curl -sS -o /dev/null -w "%{http_code}\n" https://site-a.example.net/

Alias tupu au isiyotarajiwa katika amri ya kwanza inamaanisha uteuzi wa peer si sahihi kabla ya kanuni yoyote ya ngome kuwa na umuhimu. Ikiwa alias ni sahihi na jina bado linashindikana, tatizo limehamia DNS na vyeti. Mara majina yote mawili yanapojibu na bandari ya tatu inabaki imefungwa, muundo hufanya kile inachodai: huduma mbili zilizochapishwa kwa ufinyu, si LAN mbili zilizounganishwa.

Makala zinazohusiana