I-publish ang port ng VPN client mula sa likod ng CGNAT: checklist
Ang tuntunin ng destination NAT lamang ay nagbibigay ng kalahating-bukas na koneksyon. I-pin ang address ng tunnel, isalin sa dalawang direksyon at kumpirmahin ang daan ng sagot bago subukan.
Maglagay ng serbisyo sa isang laptop sa likod ng carrier-grade NAT, ituro ang laptop na iyon sa isang VPS sa pamamagitan ng VPN, at walang makakaabot dito mula sa labas. Nagdadagdag ka ng tuntunin ng destination NAT sa VPS at nakakakuha ng mas masahol pa sa katahimikan: bumubukas ang mga koneksyon at pagkatapos ay natigil. Hindi nawawala ang sagot, lumabas ito sa sariling default na ruta ng client, ibig sabihin hindi ito nakikita ng server. Gawin ang limang pagsusuring ito nang sunud-sunod at huminto sa una na hindi tumatagal.
Kumpirmahin na ang server ay magpapasa talaga
Lagyan ng tsek ang kahong ito bago magsulat ng kahit isang salin. Ang tuntunin ng DNAT para sa packet na tinatanggihan ng kernel na ipasa ay tinatanggap ng parser ng tuntunin at pagkatapos ay itinatapon ng daan ng pagpapasa, na gumagawa ng timeout na mukhang problema sa firewall.
sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1
Ang pagtatakda nito sa tumatakbong kernel ay hindi katulad ng pagtatakda nito sa buong reboot. Isulat ang net.ipv4.ip_forward=1 sa isang file sa ilalim ng /etc/sysctl.d/, patakbuhin ang sysctl --system, at pagkatapos ay basahin muli ang halaga sa halip na magtiwala na nahuli ang file. Ang isang container na namamahala ng sarili nitong namespace ng network ay nangangailangan ng parehong halaga sa loob ng namespace na iyon, hindi lamang sa host.
Kung ang muling pagbasa ay zero pa rin, huminto dito. Wala nang gagana sa ibaba.
I-pin ang address ng tunnel bago ito banggitin ng anumang tuntunin
Ipinamimigay ng pool ang mga address sa ayos ng koneksyon, kaya ang tuntuning isinulat para sa lease ngayon ay maaaring tahimik na tumuro sa ibang client sa susunod na linggo. Itali ang address sa pagkakakilanlan ng sertipiko at hindi sa ayos ng pagdating.
client-config-dir /etc/openvpn/ccd
ifconfig-push 10.77.0.14 10.77.0.13
Ang pares na iyon ay ang dulo ng client at dulo ng peer ng isang point-to-point na tunnel, at ang server ay naka-key sa common name ng sertipiko. Sa topology na subnet ang pangalawang halaga ay binabasa bilang netmask, kaya isulat ang anyo na tumutugma sa topology na ginagamit. Pagkatapos ay ikonekta muli ang client at basahin ang address sa client mismo, dahil ang pananaw ng server sa pool ay hindi patunay ng kung ano ang na-configure ng client.
Kung magbago ang address pagkatapos ng muling pagkonekta, huminto. Ang tuntunin ng NAT na sumusunod sa gumagalaw na target ay mabibigo paminsan-minsan at wala kang matututuhan.
Isalin sa dalawang direksyon
Ang pagsasalin ng destination ay nagpapadala ng papasok na packet sa client. Ang pagsasalin ng source ang dahilan kung bakit sinasagot ng client ang server at hindi ang orihinal na nagpadala, at iyon ang tuntuning iniiwan ng mga tao.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 29443 -j DNAT --to-destination 10.77.0.14:29443
iptables -t nat -A POSTROUTING -d 10.77.0.14 -p tcp --dport 29443 -j SNAT --to-source 10.77.0.13
Kung wala ang pangalawang tuntunin, sumasagot ang client sa pamamagitan ng uplink ng ISP nito, kaya nakikita ng malayong peer ang source address na hindi nito kailanman kinausap, habang walang talaan ng pagsubaybay ang server para sa sagot. Ang panlabas na tagamasid ay nakakakita ng handshake na natatapos nang kalahati, at iyon mismo ang sintomas na nagpapadala ng mga tao upang maghanap ng bug sa firewall na wala naman.
Basahin muli ang dalawang tuntunin gamit ang iptables -t nat -S at kumpirmahin na ang pangalan ng interface ay ang nagdadala ng pampublikong address. Sa host na nag-filter na gamit ang nftables, isulat ang pagsasalin sa isang chain ng NAT ng nftables ng tugmang pamilya ng address sa halip na paghalo ng mga tool.
Hayaang dumaan ang talahanayan ng filter
Ang mga talahanayan ng NAT ay nagsusulat muli ng mga header; hindi sila nagbibigay ng pahintulot. Sa default na patakarang DROP ang naipasang daloy ay nangangailangan ng sarili nitong pagtanggap, kasama ang direksyon ng pagbalik na sakop na ng karamihan ng patakaran ng tuntuning established,related.
iptables -A FORWARD -i eth0 -o tun0 -p tcp --dport 29443 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Suriin ang patakaran ng chain ng FORWARD bago magdagdag ng anuman, dahil ang ayos ng maagang DROP ang nagpapasya kung ang tuntunin mo ay tatanungin kailanman. Sa host na ang pag-filter ay naninirahan sa nftables, idagdag ang katumbas na tuntunin sa forward hook ng talahanayang inet at kumpirmahin na ang base chain ay talagang nakakakita ng naipasang trapiko at hindi lamang lokal na input. Kung ang counter ng packet sa bagong tuntunin ay nananatiling zero habang tumataas ang mga counter ng NAT, ang packet ay itinatapon bago ang tuntunin mo. Iyon ang senyales na basahin ang ayos ng chain, hindi upang magdagdag ng pangalawang kopya ng parehong tuntunin.
Patunayan ito mula sa panlabas na network
Subukan mula sa network na walang kaugnayan. Ang pagsisiyasat mula sa ibang makina sa parehong LAN ay maaaring dumaan sa suporta ng hairpin NAT at hindi kailanman ginagamit ang daan na ginagamit ng malayong client, kaya ang berdeng resulta doon ay nagpapatunay ng maling bagay.
tcpdump -ni any port 29443
conntrack -L | grep 29443
Patakbuhin ang pagkuha sa server at sa client nang sabay. Ipinapakita ng pagkuha sa server kung ang isinaling packet ay lumalabas patungo sa tunnel; ipinapakita ng pagkuha sa client kung dumarating ang kahilingan at saan nakadirekta ang sagot. Ang talaan ng pagsasalin sa conntrack -L ay nagpapatunay na tumugma ang tuntunin, at ang kawalan nito ay nagpapatunay na hindi kailanman naabot ng packet ang chain ng NAT.
Ang mga scanner ng port ay mahinang ebidensya. Iniulat nila ang port bilang sarado hanggang sa ang aplikasyon ay nakatali at nakikinig, kaya gumamit ng tunay na koneksyon sa tunay na serbisyo. Kapag gumana na ito sa wakas, panatilihin ang pagkalantad sa nag-iisang port na iyon: ang pagpasa ng SSH o isang panel ng admin dahil ang unang tuntunin ay naging kakaiba ay isang desisyong mas malaki kaysa sa pag-publish ng serbisyo.