Fórum Root.cz
Hlavní témata => Server => Téma založeno: 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:
~ # 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
-
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.
-
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
-
Toto nastavení mi nepomohlo:
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
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:
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
-
Na server "v strede" to nedavat, tam dat do allowedip iba /32, ktoru ma peer alokovanu. Stred bude routovat podla svojej normalnej routovacej tabulky.
-
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:
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ě...
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
-
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
-
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...
-
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?
-
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í
-
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=...
-
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í
-
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,
-
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 forwardingsudo 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
sudo wg-quick down wg0&&sleep 1&&wg-quick up wg0
Konfigurace serveru pro wg-quick (/etc/wireguard/wg0.conf)
# 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
[~]$ 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
[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
-
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
-
Tak to jsem rád že se to povedlo.
Jen mi není jasné proč je v na serveru v PostUp toto
iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE
Podle mě je to zbytečné.
-
Tak to jsem rád že se to povedlo.
Jen mi není jasné proč je v na serveru v PostUp toto
iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE
Podle 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
-
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.
-
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ě
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
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