WireGuard jde do wg0, nikoliv přes síť

WireGuard jde do wg0, nikoliv přes síť
« kdy: 19. 08. 2022, 14:53:17 »
Zdravim,


opet se obracim se zadosti o radu, asi neco delam blbe.

Delsi cas mam zprovozneny WG tunel mezi nekterymi zarizenimi (Windows, iOS) a domaci branou (Linux) tak, ze na klientech jsou allowed-IPs 0.0.0.0/0 a tunel se spravne chova tak, ze vsechen traffic jde skrze Wireguard interface, jehoz traffic tece skrz fyzicky interface a nic vic jsem resit nemusel (zadne fwmarky, nic).


Narazim ale na problem u Fedory 36. Wireguard profil jsem vytvoril pres nmtui, fwmark nastaveny na 51820 a na pohled tam nevidim zadnou botu.


Kód: [Vybrat]
cat /etc/NetworkManager/system-connections/wg0.nmconnection

[connection]
id=wg0
uuid=a33d307e-71f2-454d-a68b-bafab24e9961
type=wireguard
autoconnect=false
interface-name=wg0
timestamp=1660900501
zone=internal

[wireguard]
fwmark=51820
private-key=<hidden>

[wireguard-peer.<hidden>]
endpoint=<hidden>:51820
persistent-keepalive=60
allowed-ips=0.0.0.0/0;

[ipv4]
address1=192.168.10.4/24,192.168.10.254
dns=192.168.10.254;
dns-search=at.home;
method=manual

[ipv6]
addr-gen-mode=stable-privacy
method=disabled

[proxy]
Tam by, snad, nemelo byt nic vyslovene spatne?


Nicmene jakmile odpalim
Kód: [Vybrat]
nmcli con up wg0, zacyklim se, CPU vyleti na 100% (kworker/3:2+wg-crypt-wg0) a na sit se samozrejme nedostanu.

Wireshark tvrdi, ze posledni moment, kdy neco odeslo skrze fyzicke rozhrani, je wireguard handshake. Nasledne veskery "traffic" vcetne obsahu wireguardu samotneho, je tlacen skrze wg0 a nikoliv na fyzicke rozhrani.

Kód: [Vybrat]
route
Adresát         Brána           Maska           Přízn Metrik Odkazů Užt Rozhraní
default         _gateway        0.0.0.0         UG    50     0        0 wg0
default         _gateway        0.0.0.0         UG    600    0        0 wlp59s0
172.20.10.0     0.0.0.0         255.255.255.240 U     600    0        0 wlp59s0
192.168.10.0    0.0.0.0         255.255.255.0   U     50     0        0 wg0


Napred jsem teda zapomnel uvest fwmark=51820, ale ani po jeho doplneni se to nezmenilo. Tusim, ze zakopanej pes muze byt prave tady, ale nevim, ceho se chytit.

Poradite, prosim, kam se jeste mrknout?


Diky.
« Poslední změna: 19. 08. 2022, 15:51:15 od Petr Krčmář »


bmn

  • ***
  • 145
    • Zobrazit profil
    • E-mail
Chybí tam routa na ten wg server přes to fyzické rozhraní. Čekal bych, že to tam přidá NetworkManager, ale nikdy jsem ho na wg nepoužil.

Re:WireGuard jde do wg0, nikoliv přes síť
« Odpověď #2 kdy: 19. 08. 2022, 15:54:04 »
Normální wg-quick ten provoz značkuje fwmarkem a pomocí policy routingu ho hází do správného rozhraní. Asi to ten NM nedělá, je třeba tam buď doplnit tu routu do tabulky main nebo udělat stejný postup jaký dělá wg-quick a doskriptovat si tam nahození toho policy routingu podle fwmarku.

Popisoval jsem to v článku Policy-based routing v Linuxu: směrování provozu pod kontrolou.

Re:WireGuard jde do wg0, nikoliv přes síť
« Odpověď #3 kdy: 19. 08. 2022, 18:51:33 »
Normální wg-quick ten provoz značkuje fwmarkem a pomocí policy routingu ho hází do správného rozhraní. Asi to ten NM nedělá, je třeba tam buď doplnit tu routu do tabulky main nebo udělat stejný postup jaký dělá wg-quick a doskriptovat si tam nahození toho policy routingu podle fwmarku.

Popisoval jsem to v článku Policy-based routing v Linuxu: směrování provozu pod kontrolou.

Mě to ale fungovalo dobře i s tím klikátkem, když jsem dal allowed-ips=0.0.0.0/0
Divil jsem se co to směru dobře, když tam chyběly routy, bude těma márkama.


Začal jsem tak, že jsem si vytvořil  konfigurák wireguard-quick v /etc/wireguard/wg0.conf
, zkusil že jede wireguard-quick a pak jej zkopíroval do toho klikátka pomocí

nmcli connection import type wireguard file /etc/wireguard/wg0.conf


Obsah mého souboru je:

sudo cat /etc/NetworkManager/system-connections/wg0.nmconnection
[connection]
id=wg0
uuid=4dd77a64-7273-424b-96b0-234fd9420d27
type=wireguard
interface-name=wg0

[wireguard]
private-key=2GMaRXVXjL4khITlhZGMa0dF2UTuN/vyKCJdHFoBAk8=

[wireguard-peer.RAF0/UuUTM/w7rI95CMdEmemRj8W80ecVJOyhz/IjVQ=]
endpoint=XXXXXXXXXX
persistent-keepalive=30
allowed-ips=192.168.145.0/24;192.168.144.0/24;

[ipv4]
address1=192.168.145.13/24
method=manual

[ipv6]
addr-gen-mode=stable-privacy
method=disabled

[proxy]

Odhaduji, že problém bude v tom, že je špatně naklikáno. Proč máte address1 dvě adresy?
« Poslední změna: 19. 08. 2022, 18:54:51 od xsouku04 »

ja.

  • ****
  • 316
    • Zobrazit profil
    • E-mail
Re:WireGuard jde do wg0, nikoliv přes síť
« Odpověď #4 kdy: 19. 08. 2022, 19:10:30 »
[wireguard]
private-key=XXXXXXXXXX

i, že problém bude v tom, že je špatně naklikáno. Proč máte address1 dvě adresy?

Toto si radsej dajte prec, nie je dobry napad to zverejnovat.

Ale mozem potvrdit, tiez som naimportoval konfiguraciu omocou mcli connection import type wireguard file wg0.conf a fungoval na prvu dobru.


Chybí tam routa na ten wg server přes to fyzické rozhraní. Čekal bych, že to tam přidá NetworkManager, ale nikdy jsem ho na wg nepoužil.
Bingo, dekuji!

WireGuard: musí allowed-ips být shodné?
« Odpověď #6 kdy: 22. 08. 2022, 10:56:48 »
V návodech jsem  četl, že wireguard jako jakýsi "klíč" využívá" ip adresu a allowed-ips hodnotu pro nějaké určení.
A pokud to chápu správně, tak je to jednoduše řečeno, které adresy mohou téct od daného peera(nevyhovjící neprospustí) a jaké adresy mohou téct "k " danému peerovi (Otázka, mám to chápat spíš jako routování nebo filtrování)?  Já to chápu jako routování, vybrání, na kterého peera paket poslat a až když žádný nevyhoví, paket se neodešle(filtrování je asi nepřesné)
Čili jinak - v směru  od peera: filtrování příchozích IP podle seznamu allowed-ips,,  odchozí směr:  filtrování?a?nebo?routing). Samořejmě jde o routing uvnitř tunelu, jelikož  z pohledu z vyšší úrovně(bez uvážení wireguardu) vše je routováno na wg0 - bez rozlišení peerů   


Hlavní dotaz


Moje otázka je, musí být allowed-ips shodné (na obou peerech shodná hodnota 10.1.0.64/28 & 10.1.0.64/28 nebo  i případně 10.1.0.64/28 & 10.1.0.64/28,192.168.0.0/24)

a nebo stačí slabší podmínka, aby prostě protější IP adresa byla uvnitř masek allowed-ips ?

Například
Peer 1: IP 10.1.0.81/24* . Peer 2: 10.1.0.73/24*

Allowed ips: peer 1 10.1.0.72/29, peer 2 10.1.0.80/30
* hvězdička značí, že jde o konfiguraci ip adresy podle ip addr set ... dev wg0,  a ne allowed-ips

Bude to v principu fungovat?
« Poslední změna: 22. 08. 2022, 11:00:29 od mikesznovu »

Re:WireGuard: musí allowed-ips být shodné?
« Odpověď #7 kdy: 22. 08. 2022, 16:09:48 »
Otázka, mám to chápat spíš jako routování nebo filtrování
V odchozím směru jde o routování, v příchozím směru o filtrování.

Moje otázka je, musí být allowed-ips shodné
Naopak, Allowed IPs značí, které IP adresy mohou od peera přicházet (a zároveň sekundárně, provoz na které adresy má být peerovi doručován). Nastavovat na obou stranách stejný seznam allowed IPs nedává moc smysl - buď mi daná adresa patří a tak by v seznamu povolených od vzdáleného souseda neměla být a nebo mi naopak nepatří a očekávám ji z druhé strany, pak v tom seznamu být musí. Z toho logicky plyne, že každá strana má diametrálně odlišný pohled na to, které adresy jí má protistrana posílat.

Peer 1: IP 10.1.0.81/24* . Peer 2: 10.1.0.73/24*

* hvězdička značí, že jde o konfiguraci ip adresy podle ip addr set ... dev wg0,  a ne allowed-ips
Uvádět u wireguardového rozhraní masku je zbytečné a může být i kontraproduktivní. Operační systém pak do WG rozhraní naroutuje příslušnou podsíť bez ohledu na to, jestli je tato uvnitř samotného wireguardu někam routovaná (pomocí AllowedIP). Lepší je nastavit explicitně routy pouze na adresy, které jsou povolené u nakonfigurovaných peerů, což přinejmenším wg-quick dělá standardně.

Re:WireGuard: musí allowed-ips být shodné?
« Odpověď #8 kdy: 22. 08. 2022, 16:22:30 »
V návodech jsem  četl, že wireguard jako jakýsi "klíč" využívá" ip adresu a allowed-ips hodnotu pro nějaké určení.
A pokud to chápu správně, tak je to jednoduše řečeno, které adresy mohou téct od daného peera(nevyhovjící neprospustí) a jaké adresy mohou téct "k " danému peerovi (Otázka, mám to chápat spíš jako routování nebo filtrování)?  Já to chápu jako routování, vybrání, na kterého peera paket poslat a až když žádný nevyhoví, paket se neodešle(filtrování je asi nepřesné)
Čili jinak - v směru  od peera: filtrování příchozích IP podle seznamu allowed-ips,,  odchozí směr:  filtrování?a?nebo?routing). Samořejmě jde o routing uvnitř tunelu, jelikož  z pohledu z vyšší úrovně(bez uvážení wireguardu) vše je routováno na wg0 - bez rozlišení peerů   


Hlavní dotaz


Moje otázka je, musí být allowed-ips shodné (na obou peerech shodná hodnota 10.1.0.64/28 & 10.1.0.64/28 nebo  i případně 10.1.0.64/28 & 10.1.0.64/28,192.168.0.0/24)

a nebo stačí slabší podmínka, aby prostě protější IP adresa byla uvnitř masek allowed-ips ?

Například
Peer 1: IP 10.1.0.81/24* . Peer 2: 10.1.0.73/24*

Allowed ips: peer 1 10.1.0.72/29, peer 2 10.1.0.80/30
* hvězdička značí, že jde o konfiguraci ip adresy podle ip addr set ... dev wg0,  a ne allowed-ips

Bude to v principu fungovat?

Ano takto allowIPs opravdu fungují. Poznal jsem to nyní, když mi to omylem natovalo i mezi wg peery,  Protože mi snat změnil adresu paketu na veřejnou ip adresu, která nebyla v allowIp, wireguard mi příchozí paket zahazoval.

Pokud máte dva počítače propojené přes wireguard, tak samozřejmě nemá v allowip to stejné. Každý tam má ty ip adresy, které se mají posílat přes wg spojení a ip adresy z kterých má wg pakety přijímat.  (jinak je bude wg automaticky zahazovat)
« Poslední změna: 22. 08. 2022, 16:27:15 od xsouku04 »