Рукапацісканне завяршаецца, wg show паведамляе пра нядаўнюю перадачу, і тунельны адрас сервера адказвае на ping. А хост у лакальнай сетцы сервера — не. Тры ўмовы павінны выконвацца адначасова: кліент мусіць накіроўваць прэфікс лакальнай сеткі ў тунель, сервер мусіць перасылаць пакеты, а адказу патрэбны шлях назад. Калі аднаго з трох няма, сімптом аднолькавы.

AllowedIPs — гэта і спіс доступу, і табліца маршрутызацыі

На кліенце спіс AllowedIPs вырашае і тое, што можна адпраўляць гэтаму вузлу, і тое, якія маршруты ўсталёўвае WireGuard. Запіс вузла, у якім пералічаны толькі тунельны адрас сервера, усталёўвае адзін маршрут да хоста, таму прызначэнні лакальнай сеткі ніколі не трапляюць у тунель. Даданне прэфікса лакальнай сеткі — першае, што трэба праверыць, і гэта таксама змена, якой найчасцей не хапае пасля скапіяванай канфігурацыі. Вузел, пашыраны да маршруту па змаўчанні, — гэта іншая схема, і ён перанясе таксама інтэрнэт-трафік кліента.

Трымайце маршрут да хоста і прэфікс лакальнай сеткі асобнымі запісамі. Калі ў офісе дзве падсеткі, абедзве належаць у спіс, і адсутны другі прэфікс дае збой, які выглядае выбарачным, а не поўным.

[Peer]
PublicKey = <server public key>
Endpoint = vpn.example.net:51820
AllowedIPs = 10.66.0.1/32, 192.168.50.0/24

Перасыланне і трансляцыя — на серверы

Серверу патрэбна ўключанае перасыланне IP, правіла перасылання, якое прымае трафік з тунеля, і правіла трансляцыі ў бок яго лакальнага інтэрфейса. Менавіта трансляцыя дазваляе схеме працаваць, не кранаючы кожны хост у офіснай сетцы. Тады адказы вяртаюцца на сервер, а не на адрас, пра які лакальная сетка ніколі не чула. Без яе кожнаму хосту патрэбны маршрут да падсеткі тунеля і правіла міжсеткавага экрана, якое яго дазваляе, а гэта рэдка прымальна ў сетцы, якой кіруе хтосьці іншы.

sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i wg0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Правілы, дададзеныя ўручную, знікаюць пры перазагрузцы, таму прывяжыце іх да інтэрфейса камандамі-прычэпкамі ў канфігурацыі сервера. Набор правіл, які перажывае свой інтэрфейс, — гэта як машына пачынае трансляваць трафік для тунеля, якога ўжо няма.

Калі лакальная сетка пераехала, а правіла — не

Замена маршрутызатара, якая перанумяроўвае офісную падсетку, — класічная версія гэтага збою. Тунель застаецца, рукапацісканне застаецца свежым, і нішто за серверам не адказвае, бо правіла трансляцыі ўсё яшчэ называе стары адрас. Усталявальныя скрыпты часта ўпісваюць лакальны адрас сервера ў правіла POSTROUTING, і пасля перанумяроўвання гэтага адраса няма ні на адным інтэрфейсе. Тады пакеты перапісваюцца на прызначэнне, якое не можа адказаць.

iptables -t nat -n -L POSTROUTING
ip -br addr show

Параўнайце два вывады. Мэта трансляцыі, якой няма ў спісе інтэрфейсаў, — гэта памылка, і выправіць яе — змена ў адзін радок, як толькі вы яе ўбачыце. Правіла можа жыць у згенераваным юніце, а не ў канфігурацыі WireGuard, таму перазагрузіце гэты юніт пасля рэдагавання і пераканайцеся, што наступная загрузка не перапіша вашу змену.

Дзве пляцоўкі за NAT патрэбныя месца сустрэчы

Калі ні адзін бок не прымае ўваходныя злучэнні, практычны адказ — невялікі хост з публічным адрасам і двума інтэрфейсамі WireGuard. Кожная пляцоўка злучаецца вонкі, сярэдні хост пералічвае лакальную сетку кожнага вузла ў сваім AllowedIPs, а перасыланне пераносіць пакеты паміж двума тунелямі. Нішто ў міжсеткавым экране ні адной пляцоўкі не мусіць мяняцца, таму гэтая схема лёгка распаўсюджваецца.

Маршрутызацыя паміж пляцоўкамі захоўвае зыходныя адрасы крыніцы і таму захоўвае сэнс лагавання па кожным хосце. Трансляцыя на сярэднім хосце прасцейшая, калі дзве лакальныя сеткі перасякаюцца, але каштуе страты ідэнтычнасці крыніцы ў логах. Вызначце, якая ўласцівасць важная, перш чым выбіраць.

Аддзяліце ўзроўні чатырма праверкамі

Рабіце адну праверку на ўзровень, а не змяняйце тры рэчы і спадзявайцеся. Першая паказвае ўзрост рукапаціскання і лічыльнікі для кожнага вузла. Другая паказвае, ці сапраўды кліент накіроўвае гэтае прызначэнне ў тунель. Трэцяя і чацвёртая кажуць, ці запыт дайшоў і ці скінула яго нейкая палітыка пасля прыходу.

wg show
ip route get 192.168.50.20
tcpdump -ni wg0 icmp
iptables -vnL FORWARD --line-numbers

Запыт, які дайшоў і не выклікаў адказу, паказвае на шлях адказу або на хост лакальнай сеткі. Запыт, які не дайшоў зусім, паказвае на AllowedIPs або на маршрут кліента. Гэтыя два вынікі патрабуюць розных выпраўленняў, і менавіта захоп дазваляе іх адрозніць.

Падобныя артыкулы