CGNAT arxasından VPN müştəri portunu yayımlayın: yoxlama siyahısı
Tək təyinat NAT qaydası yarım açıq bağlantılar verir. Tunel ünvanını bərkidin, hər iki istiqamətdə tərcümə edin və sınaqdan əvvəl cavab yolunu təsdiqləyin.
Xidməti operator səviyyəli NAT arxasındakı noutbuka qoyun, həmin noutbuku VPN üzərindən VPS-ə yönəldin və heç kim kənardan ona çata bilməyəcək. VPS-də təyinat NAT qaydası əlavə edirsiniz və sükutdan da pis bir şey alırsınız: bağlantılar açılır, sonra donur. Cavab itməmişdir, o, klientin öz standart marşrutu ilə çıxır, bu isə o deməkdir ki, server onu heç vaxt görmür. Bu beş yoxlamanı sıra ilə işləyin və tutmayan ilk yoxlamada dayanın.
Serverin ümumiyyətlə yönləndirəcəyini təsdiqləyin
Hər hansı tərcümə yazmazdan əvvəl bu xananı qeyd edin. Nüvənin yönləndirməkdən imtina etdiyi paket üçün DNAT qaydası qayda analizatoru tərəfindən qəbul edilir və sonra yönləndirmə yolu tərəfindən atılır, bu da firewall problemi kimi görünən bir fasilə yaradır.
sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1
Onu işləyən nüvədə qurmaq, yenidən başlatma boyunca qurmaqla eyni deyil. net.ipv4.ip_forward=1 sətrini /etc/sysctl.d/ altındakı bir fayla yazın, sysctl --system işlədin, sonra faylın götürüldüyünə güvənmək əvəzinə dəyəri geri oxuyun. Öz şəbəkə adlar məkanını idarə edən konteyner eyni dəyəri həmin məkanın içində də tələb edir, yalnız hostda deyil.
Əgər geri oxuma hələ də sıfırdırsa, burada dayanın. Aşağıda heç nə işləməyəcək.
Hər hansı qayda ona istinad etməzdən əvvəl tunel ünvanını bərkidin
Hovuz ünvanları bağlantı sırası ilə paylayır, ona görə bugünkü icarə üçün yazılmış qayda gələn həftə sakitcə başqa klientə yönələ bilər. Ünvanı gəliş sırasına deyil, sertifikat kimliyinə bağlayın.
client-config-dir /etc/openvpn/ccd
ifconfig-push 10.77.0.14 10.77.0.13
Bu cüt nöqtədən nöqtəyə tunelin klient ucu və həmkar ucudur, server isə sertifikatın ümumi adı üzərində qurulur. Alt şəbəkə topologiyasında ikinci dəyər əvəzinə netmask kimi oxunur, ona görə istifadə olunan topologiyaya uyğun formu yazın. Sonra klienti yenidən qoşun və ünvanı klientin özündə oxuyun, çünki serverin hovuza baxışı klientin nə qurduğunun sübutu deyil.
Əgər ünvan yenidən qoşulmadan sonra dəyişirsə, dayanın. Hərəkət edən hədəfi izləyən NAT qaydası fasilələrlə uğursuz olacaq və sizə heç nə öyrətməyəcək.
Hər iki istiqamətdə tərcümə edin
Təyinat tərcüməsi daxil olan paketi klientə göndərir. Mənbə tərcüməsi klientin ilkin göndərənə deyil, serverə cavab verməsini təmin edən şeydir və bu, insanların atladığı qaydadır.
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
İkinci qayda olmadan klient ISP yuxarı kanalı ilə cavab verir, ona görə uzaq həmkar heç vaxt danışmadığı bir mənbə ünvanı görür, server isə cavab üçün heç bir izləmə qeydi saxlamır. Kənar müşahidəçi yarımçıq tamamlanan əl sıxışması görür və bu, insanları mövcud olmayan firewall xətasını axtarmağa göndərən simptomun tam özüdür.
Hər iki qaydanı iptables -t nat -S ilə geri oxuyun və interfeys adının publik ünvanı daşıyan ad olduğunu təsdiqləyin. Artıq nftables ilə filtrləyən hostda tərcüməni alətləri qarışdırmaq əvəzinə uyğun ünvan ailəsinin nftables NAT zəncirində yazın.
Filtr cədvəlinə keçməyə icazə verin
NAT cədvəlləri başlıqları yenidən yazır; icazə vermirlər. Standart DROP siyasəti ilə yönləndirilən axın öz qəbuluna, üstəgəl əksər siyasətlərin artıq established,related qaydası ilə əhatə etdiyi geri istiqamətə ehtiyac duyur.
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
Bir şey əlavə etməzdən əvvəl FORWARD zəncirinin siyasətini yoxlayın, çünki erkən DROP-un sırası qaydanızın ümumiyyətlə nəzərə alınıb-alınmayacağını müəyyən edir. Filtrasiyası nftables-da yaşayan hostda ekvivalent qaydanı inet cədvəlinin forward qarmağına əlavə edin və əsas zəncirin yalnız yerli girişi deyil, həqiqətən yönləndirilmiş trafiki gördüyünü təsdiqləyin. Əgər yeni qaydadakı paket sayğacı sıfırda qalarkən NAT sayğacları qalxırsa, paket qaydanızdan əvvəl atılır. Bu, zəncir sırasını oxumaq üçün siqnaldır, eyni qaydanın ikinci nüsxəsini əlavə etmək üçün deyil.
Bunu kənar şəbəkədən sübut edin
Əlaqəsiz şəbəkədən sınaqdan keçirin. Eyni LAN-dakı başqa maşından edilən yoxlama hairpin NAT dəstəyindən keçə və uzaq klientin istifadə etdiyi yolu heç vaxt işlədə bilməz, ona görə oradakı yaşıl nəticə yanlış şeyi sübut edir.
tcpdump -ni any port 29443
conntrack -L | grep 29443
Tutmağı serverdə və klientdə eyni vaxtda işlədin. Server tutması tərcümə edilmiş paketin tunelə doğru çıxıb-çıxmadığını göstərir; klient tutması sorğunun gəlib-gəlmədiyini və cavabın hara ünvanlandığını göstərir. conntrack -L-də tərcümə qeydi qaydanın uyğunlaşdığını sübut edir, onun olmaması isə paketin NAT zəncirinə heç vaxt çatmadığını sübut edir.
Port skanerləri zəif sübutdur. Tətbiq bağlanıb dinləməyə başlayana qədər portu bağlı bildirirlər, ona görə real xidmətə real bağlantı istifadə edin. Nəhayət işləyəndə məruz qalmanı həmin bir portda saxlayın: ilk qayda narahat göründüyü üçün SSH və ya idarə panelini yönləndirmək xidmət yayımlamaqdan qat-qat böyük qərardır.