Прозорецот на клиентот вели Connected, адресата на тунелот е таму, а браузерот сè уште се врти. Таа комбинација е нормална, бидејќи успешното ракување докажува само дека тунелот е изграден; тоа не кажува ништо за тоа дали серверот ќе ги препрати вашите пакети, ќе го препише нивниот извор или ќе одговори на вашите DNS барања. Грешката што ја прават повеќето е да ја отворат прво конфигурацијата на серверот. Наместо тоа, движете се од клиентот кон надвор, бидејќи секој чекор подолу кажува дали следниот воопшто вреди да се провери.

Започнете од клиентот и движете се кон надвор

Направете три теста во овој ред и запишете каде паѓа првиот. Пингнете ја адресата на тунелот на серверот, што докажува дека самиот тунел пренесува сообраќај. Пингнете јавна адреса по број, што докажува препраќање и превод без вклучување на резолуција на имиња. Потоа обидете се да решите име на домаќин, што е единствениот тест што користи DNS. Секој резултат отстранува цел слој од сомнеж.

Не прескокнувајте на третиот тест затоа што браузерот изгледа побрз. Неуспешното вчитување страница ги покрива сите три слоја одеднаш, и токму од таму луѓето почнуваат и потоа го преградуваат тунелот што работел. Страницата што не успева не ви кажува кој од трите се скршил.

Две снимки покажуваат каде запираат пакетите

Додека од клиентот тече пинг до јавна адреса, направете една снимка на интерфејсот на тунелот и една на горниот канал што треба да стигне до интернет. Пуштете ги двете истовремено за да се поклопат временските обележувачи.

sudo tcpdump -ni tun0 -c 20 icmp
sudo tcpdump -ni enp1s0 -c 20 icmp

Ако барањата се појавуваат на тунелот и никогаш на горниот канал, серверот ги фрлил меѓу тунелот и кабелот, а причината е препраќање или политиката на заштитниот ѕид за препраќање, не NAT. Ако се појавуваат на двете, серверот го завршил својот дел и одговорот недостига подалеку, што упатува на превод, филтер погоре или ограничување од провајдерот.

Земете го името на горниот канал од табелата за рутирање, не од туторијал. Облачните слики и преименуваните адаптери ретко се совпаѓаат со примерниот интерфејс во водич, а снимка направена на погрешен уред изгледа токму како сервер што не препраќа:

ip -4 route get 9.9.9.9

Полето dev во тој излез е името што правилото за NAT ќе го бара подоцна, затоа задржете го.

Препраќањето е прекинувач во јадрото и политика на заштитниот ѕид

Јадрото мора воопшто да се согласи да препраќа. Прочитајте ја тековната вредност, потоа направете ја поставката трајна наместо да ја пишувате само во јадрото што работи:

sysctl net.ipv4.ip_forward
printf 'net.ipv4.ip_forward=1\n' > /etc/sysctl.d/70-vpn-forward.conf
sysctl --system

Препраќањето е само половина. На домаќин со UFW политиката за препраќање се поставува во /etc/default/ufw и мора да биде ACCEPT пред да дејствува превчитувањето. Стандардното отфрлање на патеката за препраќање го остава ракувањето сосема здраво, но молкум го фрла секој пакет што се обидува да излезе низ тунелот, и тоа е точно симптомот со кој почнавте.

Домаќините што управуваат со nftables директно го имаат истото прашање во друга синтакса. Гледајте ги бројачите на синџирот за препраќање додека трае тестот од клиентот, бидејќи синџирот што се консултира и синџирот што отфрла во конфигурациска датотека изгледаат исто.

Именувајте го вистинскиот излезен интерфејс во правилото за NAT

Преводот на изворот припаѓа на интерфејсот што навистина го напушта домаќинот, со базенот што серверот го дели. Двете половини од тоа правило мора да ја опишуваат реалноста, и ниту една не е незадолжителна.

iptables -t nat -A POSTROUTING -s 10.44.0.0/24 -o enp1s0 -j MASQUERADE

Класичниот неуспех е правило копирано од водич што вели -o eth0 на машина чиј адаптер се вика поинаку. Правилото се инсталира без предупредување, не се совпаѓа со ништо, а клиентот сè уште нема интернет. Базенот е другата половина од истата грешка: ако серверот дели 10.44.0.0/24, а правилото покрива 10.8.0.0/24, ништо никогаш нема да се совпадне.

Гледајте ги бројачите наместо да му верувате на текстот на правилото. Списокот известува пакети по правило, а правилото што никогаш не се совпаѓа останува на нула колку и да изгледа точно. Дајте му една минута вистински сообраќај од клиентот пред да извлечете нешто од тој број:

iptables -t nat -L POSTROUTING -v -n

Нула пакети по вистински тест од клиентот значи дека совпаѓањето е погрешно, а не дека тунелот е скршен. Откако ќе се совпадне, зачувајте го множеството правила за да преживее рестарт; поправка што живее само во историјата на вашата обвивка исчезнува при првиот рестарт.

Ако серверот е и облачен пример на NAT, платформата исто така има збор. Пример што преведува адреси обично бара исклучена проверка на изворот и одредиштето каде провајдерот ја нуди таа поставка, а самата VPN порта мора да биде достапна однадвор.

DNS е вториот неуспех зад првиот

Пингот по адреса што работи додека имињата паѓаат е проблем на резолверот, и има своја причина. Клиент што го задржува локалниот резолвер ги праќа тие барања во целосен тунел и чека одговор што никогаш не доаѓа, бидејќи локалниот резолвер сега е на погрешната страна од рутата.

Испратете резолвер од серверот за клиентот да знае каде да праша. Два записи му даваат резерва на клиентот ако првиот не е достапен, и двата треба да бидат резолвери што тунелот навистина ги дозволува.

push "dhcp-option DNS 9.9.9.9"
push "dhcp-option DNS 149.112.112.112"

Клиентите на Windows потоа може сепак да се вратат на локалниот резолвер, и токму тоа block-outside-dns постои за да го спречи, по цена на губење имиња што само локалната мрежа може да ги реши. Linux клиентите со systemd-resolved често го игнорираат испратениот резолвер освен ако скрипта не го инсталира, затоа проверете resolvectl status за уредот на тунелот пред да заклучите дека испраќањето е игнорирано.

Завршете ја прошетката како што ја доживува корисникот. Вчитајте вистинска страница од клиентот, потврдете ја адресата од која излегува, рестартирајте го серверот, поврзете се повторно и повторете ги трите теста. Само тој втор круг докажува дека зачуваните правила, политиката на заштитниот ѕид и испратениот резолвер сите заедно преживеале.

Поврзани статии