Fórum Root.cz

Hlavní témata => Server => Téma založeno: Vilith 19. 01. 2021, 14:22:13

Název: Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Vilith 19. 01. 2021, 14:22:13
Experimentuji s wireguardem a nalezl jsem článek https://www.zahradnik.io/wireguard-a-vpn-with-real-world-usage-in-mind a zkouším podle něj propojit 2 LAN za NAT přes server s veřejnou IP

Server je Debian 10, v obou lokalitách běží OpenWRT routery. Orientační schéma je v příloze

Nejlepší varianta, kterou se mi podařilo rozchodit, je, že se ze serveru dostanu do obou lokalit na zařízení v jednotlivých LAN, ale už se mi nedaří komunikovat přes server mezi zařízeními v LAN

Stále tápu, jak nastavit AllowedIPs na jednotlivých zařízeních, případně routing (kde a jaký)

Neměl by někdo funkční řešení mého problému?

Konfugurace wireguardu na serveru:

Kód: [Vybrat]
~ # cat /etc/wireguard/wg0.conf
[Interface]
Address = 192.168.222.1/24
Address = fd00:db80:0:222::1/64
SaveConfig = true
ListenPort = 51194
PrivateKey = xxx=

[Peer]
PublicKey = zzz=
AllowedIPs = 192.168.222.10/32, fd00:db80:0:222::10/128, 192.168.10.0/24, fd00:db80:0:10::/64
Endpoint = a.b.c.d:35681

[Peer]
PublicKey = yyy=
AllowedIPs = 192.168.222.20/32, fd00:db80:0:222::20/128, 192.168.20.0/24, fd00:db80:0:20::/64
Endpoint = e.f.g.h:46475
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: ja. 19. 01. 2021, 16:26:54
AllowedIP je v podstate zoznam subnetov, routovanych cez dany wg interface. 0.0.0.0/0 znamena default gateway.

T.j. na gw v LAN A potrebujes mat v AllowedIP subnet  preLAN B a naopak.
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Vilith 19. 01. 2021, 16:56:30
AllowedIP je v podstate zoznam subnetov, routovanych cez dany wg interface. 0.0.0.0/0 znamena default gateway.

T.j. na gw v LAN A potrebujes mat v AllowedIP subnet  preLAN B a naopak.

Bohužel, tohle mi neprojde, wireguard nedovolí ma serveru ve "středu" zadat stejné AllowedIP na obou peerech
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Vilith 19. 01. 2021, 20:40:55
Toto nastavení mi nepomohlo:

Kód: [Vybrat]
peer A:
  allowed ips: 192.168.10.0/24, fd00:db80:0:10::/64, 192.168.222.10/32, fd00:db80:0:222::10/128, 192.168.222.1/32, fd00:db80:0:222::1/128, 192.168.222.20/32, fd00:db80:0:222::20/128, 192.168.20.0/24, fd00:db80:0:20::/64

Kód: [Vybrat]
peer B:
  allowed ips: 192.168.20.0/24, fd00:db80:0:20::/64, 192.168.222.20/32, fd00:db80:0:222::20/128, 192.168.222.1/32, fd00:db80:0:222::1/128, 192.168.222.10/32, fd00:db80:0:222::10/128, 192.168.10.0/24, fd00:db80:0:10::/64

a na serveru ve středu:

Kód: [Vybrat]
peer A:
  allowed ips: 192.168.222.10/32, fd00:db80:0:222::10/128, 192.168.10.0/24, fd00:db80:0:10::/64

peer B:
  allowed ips: 192.168.222.20/32, fd00:db80:0:222::20/128, 192.168.20.0/24, fd00:db80:0:20::/64
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: ja. 19. 01. 2021, 20:47:20
Na server "v strede" to nedavat, tam dat do allowedip iba /32, ktoru ma peer alokovanu. Stred bude routovat podla svojej normalnej routovacej tabulky.
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Vilith 19. 01. 2021, 20:56:52
Na server "v strede" to nedavat, tam dat do allowedip iba /32, ktoru ma peer alokovanu. Stred bude routovat podla svojej normalnej routovacej tabulky.

Upraven střed na:

Kód: [Vybrat]
peer A:
  allowed ips: 192.168.10.0/24, fd00:db80:0:10::/64

peer B:
  allowed ips: 192.168.20.0/24, fd00:db80:0:20::/64

ale stále to není ono :(
Už si ze středu nepingnu na 192.168.222.10 ani na 192.168.222.20

Ještě to zkusím obráceně...

Kód: [Vybrat]
peer A:
  allowed ips: 192.168.222.10/32, fd00:db80:0:222::10/128

peer B:
  allowed ips: 192.168.222.20/32, fd00:db80:0:222::20/128

a potom zase nepingnu ze středu na 192.168.10.1 nebo 192.168.20.1
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Ondřej Vaniš 19. 01. 2021, 22:19:49
Tipnul bych si že problém bude ve špatně nastaveném routování.
Na peer A by mělo být:
ip route add 162.168.20.1/24 via 192.168.222.10 dev wg0
Na peer B:
ip route add 192.168.10.1/24 via 192.168.222.20 dev wg0
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Vilith 19. 01. 2021, 22:35:31
na
   ip route add 162.168.20.1/24 via 192.168.222.10 dev wg0
hlásí invalid prefix

   ip route add 162.168.20.1/32 via 192.168.222.10 dev wg0
nepomohlo, stejně jako nepomohlo
   ip route add 162.168.20.0/24 via 192.168.222.10 dev wg0 

Dík za snahu, ale tudy cesta nevede... :(

Nebo už se zase někde motám zase v kruhu...
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Ondřej Vaniš 19. 01. 2021, 22:57:11
Ale jo. Tudy cesta určitě vede.
Dělal jsem něco obdobného pomocí OpenVPN na propojení 5ti lokalit.
Musím říct že nastavení routování byl právě ten největší masakr.
Všiml jsem si že jsem v tom příkazu zadal špatnou IP.
Místo 162.168.20.1/24 mělo být 192.168.20.1/24 tak zkus ještě to.
Ještě otázka. Je peer A i B befault gateway pro každou lokalitu?
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Vilith 19. 01. 2021, 23:02:59
Pod OpenVPN mi to chodí (nebylo to až tak těžké - hlavně to je jinde popsané), jen jsem chtěl vyzkoušet něco nového, co nikde není pořádně popsané, jen naznačené :D

Každá lokalita má svou def. GW a jde na internet svou cestou - nechci veškerý provoz z LAN pouštět do tunelů. Jedná se jen o vzájemné propojení jejich LAN sítí
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Ondřej Vaniš 19. 01. 2021, 23:03:57
Ještě jedna důležitá věc ohledně peerů za NATem.
https://www.wireguard.com/quickstart/
Přeci si sekci "NAT and Firewall Traversal Persistence"
Na peerech je třeba nastavit parametr PersistentKeepalive=...
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Vilith 19. 01. 2021, 23:48:06
Ještě jedna důležitá věc ohledně peerů za NATem.
https://www.wireguard.com/quickstart/
Přeci si sekci "NAT and Firewall Traversal Persistence"
Na peerech je třeba nastavit parametr PersistentKeepalive=...

PersistentKeepalive je samozřejmě nastavené - v tom problém není

Trápil jsem Google, ale nenašel jsem pořádnou ucelenou funkční radu, jak zrealizovat dané řešení. Proto se prám zde, zda to někdo nemá funkční
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Ondřej Vaniš 19. 01. 2021, 23:50:53
Pošli tedy konfiguráky wireguard na jednotlivých nodech a jejich routovací tabulky.
Ať tu nemusíme věštit z křišťálové koule. Jinak se dále nepohneme,
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: drobek1 20. 01. 2021, 10:01:20
To co požaduješ provozuju a funguje to. Používám jen protokol IPV4.
Vycházel jsem z článku https://www.stavros.io/posts/how-to-configure-wireguard/ (https://www.stavros.io/posts/how-to-configure-wireguard/) .
Konfigurace v OpenWRT https://danrl.com/writing/luci-proto-wireguard/ (https://danrl.com/writing/luci-proto-wireguard/) , https://doc.turris.cz/doc/en/public/wireguard (https://doc.turris.cz/doc/en/public/wireguard).

Můj konfig předpokládá server s aktivními IPTABLES (používám CentOS).
Musí být povolený IP forwarding
Kód: [Vybrat]
sudo sysctl -w net.ipv4.ip_forward=1
This would enable IP forwarding immediately, but after a reboot it will revert back to default.
To permanently enable IP forwarding you would need to edit the /etc/sysctl.conf configuration file
(with superuser privileges or as root).

Použité adresní rozsahy - abych jednoduše rozlišil co je kde
10.10.10.x - adresy jednotlivých Wireguard uzlů
172.20.x.x - adresní rozsahy použité na routrech

Pro konfiguraci na serveru používám nástroj wg-quick, tj. reload konfigurace pak vypadá takto
Kód: [Vybrat]
sudo wg-quick down wg0&&sleep 1&&wg-quick up wg0
Konfigurace serveru pro wg-quick (/etc/wireguard/wg0.conf)
Kód: [Vybrat]
# Server file
[Interface]
# Which networks does my interface belong to? Notice: /24 and /64
# 255.255.255.0 => 24
Address = 10.10.10.1/24
PrivateKey = AGF.....
ListenPort = yyyyy
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = DomA.....
# Which source IPs can I expect from that peer? Notice: /32 and /128
AllowedIps = 10.10.10.100/32,172.20.100.0/24

[Peer]
PublicKey = MIcH.....
# Which source IPs can I expect from that peer? Notice: /32 and /128
AllowedIps = 10.10.10.130/32

[Peer]
PublicKey = tcHy.....
# Which source IPs can I expect from that peer? Notice: /32 and /128
AllowedIps = 10.10.10.150/32,172.20.150.0/24

AllowedIps - první adresa /32 je adresa konce tunelu, tj. adresa routru. Ta další adresa /24 je provoz který má tím tunelem jít.
Síťová karta má na serveru označení eth0.

Na serveru pak mám routování - nastaví si wg-quick sám
Kód: [Vybrat]
[~]$ ip route
default via 80.x.x.x dev eth0
10.10.10.0/24 dev wg0 proto kernel scope link src 10.10.10.1
80.x.x.x/24 dev eth0 proto kernel scope link src 80.x.x.x
172.20.100.0/24 dev wg0 scope link
172.20.150.0/24 dev wg0 scope link
...

Konfigurace klienta pro PC - kompletní provoz přes server
Kód: [Vybrat]
[Interface]
Address = 10.10.10.130/24
DNS = 8.8.8.8, 8.8.4.4
PrivateKey = GI......

# Server
[Peer]
PublicKey = SERV.....
AllowedIPs = 0.0.0.0/0
Endpoint = 80.x.x.x:yyyyy
PersistentKeepalive = 25
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Vilith 20. 01. 2021, 18:11:34
Děkuji všem za pomoc

Konfiguraci jsem se pokusil stručně shrnout do přiloženého PDF souboru.
Snad to bude inspirací i pro ostatní

Chyběly mi PostUp a PostDown scripty na serveru, statické routy na nodech a správně zadat AllowedIP
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Ondřej Vaniš 20. 01. 2021, 21:39:32
Tak to jsem rád že se to povedlo.
Jen mi není jasné proč je v na serveru v PostUp toto
Kód: [Vybrat]
iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADEPodle mě je to zbytečné.
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Vilith 21. 01. 2021, 07:12:18
Tak to jsem rád že se to povedlo.
Jen mi není jasné proč je v na serveru v PostUp toto
Kód: [Vybrat]
iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADEPodle mě je to zbytečné.

To  jsem neřešil, ale použil z předchozího příkladu od drobek1, kdy autor posílá do tunelu veškerý provoz a odchozí komunikaci zajišťuje server ve středu řešení.

U mne to moc význam mít nebude, ale co kdyby někdy něco do tunelu "vlítlo" v rámci experimentu a nebo nepozornosti

Snad se nepletu
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Ondřej Caletka 21. 01. 2021, 13:31:10
Připadá mi, že to v tom PDF máte nějak obráceně.

Node1 má u sebe síť 192.168.10.0/24 a má svou adresu ve VPN 192.168.222.10

Tedy by měl mít v AllowedIPs rozsahy jiných sítí a ne svojí. Tedy 192.168.20.0/24 a 192.168.222.0/24
Položky 192.168.222.1/32 a 192.168.222.20/32 jsou nadbytečné, protože jsou pokryty hodnotou 192.168.222.0/24.

Osobně bych doporučoval zvolit spíše větší prefix, pro případ, že sítě budou časem tři nebo čtyři - nemá cenu obcházet pak nastavení všech uzlů. Já bych tedy doporučil na oba nody nastavit AllowedIPs na 192.168.0.0/16.

Static route také není potřeba, protože Wireguard je L3 spoj, takže tam se adresa nexthopu beztak nijak neuplatní (192.168.20.0/24 via 192.168.222.20 dev wg0 je totéž co 192.168.20.0/24 dev wg0 a tento záznam automaticky vytvoří startovací skript wireguardu, pokud mu nevypnete "Route Allowed IPs").

Na straně serveru je nastavení AllowedIPs správně, ovšem ta maškaráda a pravidla PostUp a PostDown jsou úplně zbytečná, stačí prostě povolit předávání v /proc/sys/net/ipv4/ip_forward a pokud se používá firewall, nastavit ho tak, aby neblokoval forwarding. To lze udělat staticky.
Název: Re:Wireguarg a propojení 2 NAT LAN přes veřejný server
Přispěvatel: Vilith 21. 01. 2021, 13:53:05
Připadá mi, že to v tom PDF máte nějak obráceně.

Node1 má u sebe síť 192.168.10.0/24 a má svou adresu ve VPN 192.168.222.10

Tedy by měl mít v AllowedIPs rozsahy jiných sítí a ne svojí. Tedy 192.168.20.0/24 a 192.168.222.0/24
Položky 192.168.222.1/32 a 192.168.222.20/32 jsou nadbytečné, protože jsou pokryty hodnotou 192.168.222.0/24.

Osobně bych doporučoval zvolit spíše větší prefix, pro případ, že sítě budou časem tři nebo čtyři - nemá cenu obcházet pak nastavení všech uzlů. Já bych tedy doporučil na oba nody nastavit AllowedIPs na 192.168.0.0/16.

Static route také není potřeba, protože Wireguard je L3 spoj, takže tam se adresa nexthopu beztak nijak neuplatní (192.168.20.0/24 via 192.168.222.20 dev wg0 je totéž co 192.168.20.0/24 dev wg0 a tento záznam automaticky vytvoří startovací skript wireguardu, pokud mu nevypnete "Route Allowed IPs").

Na straně serveru je nastavení AllowedIPs správně, ovšem ta maškaráda a pravidla PostUp a PostDown jsou úplně zbytečná, stačí prostě povolit předávání v /proc/sys/net/ipv4/ip_forward a pokud se používá firewall, nastavit ho tak, aby neblokoval forwarding. To lze udělat staticky.

Nevím, ale toto řešení, jako jedno z mnoha pokusů, je funkční

Node A má skutečně
Kód: [Vybrat]
allowed ips: 192.168.10.0/24, 192.168.222.10/32, 192.168.222.1/32, 192.168.222.20/32, 192.168.20.0/24

Jeho LAN je 192.168.10.0/24
VPN co ho řídí je 192.168.222.10/32
na serveru je 192.168.222.1/32
a na nodu B je 192.168.222.20/32

Obecně se dá povolit vše, ale na druhou stranu je lépe mít větší kontrolu a povolovat opravdu jen to, co je potřeba

Nyní je zvolen malý IP adresní rozsah IPv4 , ale jistě pro nikoho nebude problém použít rozsahy větší podle potřeby

Kód: [Vybrat]
192.168.20.0/24 via 192.168.222.20 dev wg0 proto static je jeden z řádků výpisu "ip rou" na node A. Vlastní routing je nastaven na další záložce v OpenWRT webové konfigurace