WireGuard rankos paspaudimas veikia, bet biuro potinklis neatsako
WireGuard veikia ir pingina serverį, tačiau niekas jo LAN tinkle neatsako. Patikrinkite kliento prefiksą, serverio persiuntimą ir atsakymo kelią.
Rankos paspaudimas baigiasi, wg show praneša apie neseniai įvykusį perdavimą, o serverio tunelio adresas atsako į ping. Serverio LAN tinkle esantis mazgas neatsako. Trys sąlygos turi galioti vienu metu: klientas turi maršrutizuoti LAN prefiksą į tunelį, serveris turi persiųsti paketus, o atsakymui reikia kelio atgal. Kai vienos iš trijų trūksta, simptomas yra toks pat.
AllowedIPs yra ir prieigos sąrašas, ir maršrutizavimo lentelė
Kliente sąrašas AllowedIPs nusprendžia ir tai, ką galima siųsti tam peer, ir tai, kokius maršrutus įdiegia WireGuard. Peer įrašas, kuriame nurodytas tik serverio tunelio adresas, įdiegia vieną mazgo maršrutą, todėl LAN paskirties vietos niekada nepatenka į tunelį. LAN prefikso pridėjimas yra pirmas dalykas, kurį reikia patikrinti, ir tai taip pat pakeitimas, kurio dažniausiai trūksta nusikopijavus konfigūraciją. Peer, išplėstas iki numatytojo maršruto, yra kitas dizainas, ir jis taip pat perkels kliento interneto srautą.
Laikykite mazgo maršrutą ir LAN prefiksą atskirais įrašais. Jei biure yra du potinkliai, abu priklauso sąrašui, o trūkstamas antrasis prefiksas sukelia gedimą, kuris atrodo selektyvus, o ne visiškas.
[Peer] PublicKey = <server public key> Endpoint = vpn.example.net:51820 AllowedIPs = 10.66.0.1/32, 192.168.50.0/24
Persiuntimas ir vertimas priklauso serveriui
Serveriui reikia įjungto IP persiuntimo, persiuntimo taisyklės, kuri priima iš tunelio ateinantį srautą, ir vertimo taisyklės link jo LAN sąsajos. Būtent vertimas leidžia dizainui veikti neliečiant kiekvieno biuro tinklo mazgo. Tada atsakymai grįžta į serverį, o ne į adresą, apie kurį LAN niekada negirdėjo. Be to, kiekvienam mazgui reikia maršruto į tunelio potinklį ir ugniasienės taisyklės, kuri jį leidžia, o tai retai priimtina tinkle, kurį administruoja kas nors kitas.
sysctl -w net.ipv4.ip_forward=1 iptables -A FORWARD -i wg0 -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Rankiniu būdu pridėtos taisyklės dingsta paleidus iš naujo, todėl susiekite jas su sąsaja serverio konfigūracijos hook komandomis. Taisyklių rinkinys, kuris gyvena ilgiau nei jo sąsaja, yra būdas, kuriuo mašina galiausiai ima versti srautą tuneliui, kurio nebėra.
Kai LAN persikėlė, o taisyklė ne
Maršrutizatoriaus pakeitimas, kuris pernumeruoja biuro potinklį, yra klasikinė šio gedimo versija. Tunelis lieka įjungtas, rankos paspaudimas lieka šviežias, ir niekas už serverio neatsako, nes vertimo taisyklė vis dar nurodo seną adresą. Diegimo scenarijai dažnai įterpia serverio LAN adresą į POSTROUTING taisyklę, o po pernumeravimo to adreso nėra nė vienoje sąsajoje. Tada paketai perrašomi į paskirties vietą, kuri negali atsakyti.
iptables -t nat -n -L POSTROUTING ip -br addr show
Palyginkite abu išėjimus. Vertimo tikslas, kuris nepasireiškia sąsajų sąraše, yra klaida, o ją ištaisyti yra vienos eilutės pakeitimas, kai ją pamatysite. Taisyklė gali gyventi sugeneruotame unit, o ne WireGuard konfigūracijoje, todėl po redagavimo iš naujo įkelkite tą unit ir patvirtinkite, kad kitas paleidimas neperrašys jūsų pakeitimo.
Dvi vietos už NAT turi kur susitikti
Kai nė viena pusė nepriima įeinančių ryšių, praktinis atsakymas yra mažas mazgas su viešu adresu ir dviem WireGuard sąsajomis. Kiekviena vieta jungiasi į išorę, vidurinis mazgas kiekvieno peer LAN į savo AllowedIPs, savo sąrašą, įtraukia, o persiuntimas perneša paketus tarp dviejų tunelių. Niekas nė vienos vietos ugniasienėje neturi keistis, todėl šis dizainas lengvai plinta.
Maršrutizavimas tarp vietų išsaugo pirminius šaltinio adresus ir todėl išlaiko prasmingą registravimą pagal mazgą. Vertimas viduriniame mazge yra paprastesnis, kai du LAN persidengia, bet už šaltinio tapatybės praradimą žurnaluose. Nuspręskite, kuri savybė svarbi, prieš rinkdamiesi.
Atskirkite sluoksnius keturiais patikrinimais
Atlikite vieną patikrinimą kiekvienam sluoksniui, o ne keiskite tris dalykus ir tikėkitės. Pirmasis rodo rankos paspaudimo amžių ir skaitiklius kiekvienam peer. Antrasis rodo, ar klientas iš tikrųjų maršrutizuoja tą paskirties vietą į tunelį. Trečiasis ir ketvirtasis pasako, ar užklausa atvyko ir ar kokia nors politika ją atmetė po atvykimo.
wg show ip route get 192.168.50.20 tcpdump -ni wg0 icmp iptables -vnL FORWARD --line-numbers
Užklausa, kuri atvyksta ir nesukelia atsakymo, nurodo atsakymo kelią arba LAN mazgą. Užklausa, kuri niekada neatvyksta, nurodo AllowedIPs arba kliento maršrutą. Šie du rezultatai reikalauja skirtingų pataisymų, ir būtent įrašymas juos atskiria.