Long story short
Tételezzük fel hogy van két telephelyünk, amelyeket szeretnénk összekötni egy biztonságos csatornával, hogy az adatok lapátolását házon belül tudjuk tartani, ne kelljen portokat nyitogatni a világ felé.
Igen, erre való a site-to-site VPN.
Erre számtalan megoldás létezik, mégis adódhatnak olyan helyzetek amikor nem elegendő két relatív jó routert beszereznünk amelyek ezt a csatornát fel tudják építeni és könnyedén tudják működtetni. Azt tudni kell, hogy a VPN egy titkosított csatornát épít fel két végpont között. Ennek a titkosításnak a kezelése elég erőforrásigényes, így ha az adott protokolra nincs közvetlen hardveres támogatás, akkor a kommunikáció bér létrejön, de relatív lassú lesz.
Ebbe a helyzetbe kerültem én is. A felállás a következő.
Van két telephely egymástól 500km -re: Telephely 1 [1000/100Mbit/s], Telephely 2 [500/80Mbit/s]
Az egyik telephelyen Fix IP kiosztás van, a másikon dinamikus, így azt DDNS -l kell elérhetővé tenni a másik fél számára.
A két telephelyen van két Unifi USG3P, ezeken Site-To-Site VPN van felépítve. Mivel ezeken az eszközökön az IP-SEC nem tudja kezelni a DDNS -t, így az alagút kialakítására OpenVPN -t használtam.
Probléma: az USG3P nem támogatja hardveresen az OpenVPN által használt titkosítást, így bármennyire is jó szolgáltatás van mindkét telephelyen, az így összekötött belső hálózat sávszélessége 6-8Mbit/s -ra korlátozódott.
Lehetséges bevethető megoldások
Fix IP címet bérelünk a második telephelyre is és megoldjuk a hardveresen gyorsított IP-SEC -l, így házon belül elérhetünk egy 50-60Mbit/s -t.
Lecseréljük a Security Gatewayeket erősebbekre, ez elég zsebbenyúlós megoldás de működhet.
A két telephelyre telepített szervereket összekötjük egy Wireguard tunnelel, azt kiterjesztjük a belső hálózatokra. Az USG -k között működő Site-To-Site OpenVPN -t sem kell kidobni, megmaradhat vésztartaléknak arra az esetre ha valamelyik szervert le kell állítani, mondjuk karbantartás miatt.
Mondanom sem kell, az utóbbira esett a sor.
Nézzük a hálózati topológiát.
Telephely | Telephely 1 | Telephely 2 |
Internet sávszélesség | 1000/100Mbit/s | 500/80Mbit/s |
Router | Unifi USG3P | Unifi USG3P |
IP tartomány | 192.168.1.0/24 | 192.168.2.0/24 |
L2TP VPN(private) | 192.168.10.0/24 | 192.168.20.0/24 |
Szerver IP | 192.168.1.50 | 192.168.1.50 |
Wireguard IP | 10.20.0.1 | 10.20.0.2 |
DDNS | t1.ddns.com | t2.ddns.com |
Mielőtt elkezdenénk a terminálozást, jelöljünk ki a HOST szervert amelyikhez majd a kliens csatlakozni fog.
Én most a Szerver 1 -t választom erre a feladatra, annyi a dolgunk hogy a Telephely 1 routerén engedjük ki a 51821/UDP portot.
Setup
Első körben fel kell telepíteni a Wireguardot mindkét szerverre.
apt install wireguard -yMajd létre kell hozzunk mindkét szerveren egy kulcsot amivel később a kapcsolatot felépítjük.
umask 077
wg genkey | tee /etc/wireguard/site2site.key | \
wg pubkey > /etc/wireguard/site2site.pubÍrassuk ki a publikus kulcsokat mindkét szerveren.
cat /etc/wireguard/site2site.pub Legyenek mondjuk
Szerver 1: V7tLctnKQOyQf6D3KFkkttD/qZReHklsL9rOrFat8gE=
Szerver 2: V8tLctnKQOyQf6D3KFkkttD/qZReHklsL9rOrFat9gT=
Hozzuk létre a configurációs fájlokat.
Szerver 1
PRIVATE_KEY=$(cat /etc/wireguard/site2site.key)
cat > /etc/wireguard/wg0.conf <<EOF
[Interface]
Address = 10.20.0.2/30
ListenPort = 51821
PrivateKey = ${PRIVATE_KEY}
MTU = 1420
[Peer]
# Telephely 2
PublicKey = V8tLctnKQOyQf6D3KFkkttD/qZReHklsL9rOrFat9gT=
AllowedIPs = 10.20.0.1/32
EOF
chmod 600 /etc/wireguard/wg0.conf
unset PRIVATE_KEYSzerver 2
PRIVATE_KEY=$(cat /etc/wireguard/site2site.key)
cat > /etc/wireguard/wg0.conf <<EOF
[Interface]
Address = 10.20.0.1/30
PrivateKey = ${PRIVATE_KEY}
MTU = 1420
[Peer]
# Telephely 1
PublicKey = V7tLctnKQOyQf6D3KFkkttD/qZReHklsL9rOrFat8gE=
Endpoint = t1.ddns.com:51821
AllowedIPs = 10.20.0.2/32
PersistentKeepalive = 25
EOF
chmod 600 /etc/wireguard/wg0.conf
unset PRIVATE_KEYIndítsuk el a kapcsolatokat mindkét szerveren, majd ellenőrizzük a kapcsolat állapotát.
wg-quick up wg0
wg show
#Server1:
ping -c 5 10.20.0.2
#Server2:
ping -c 5 10.20.0.1Ha minden működik engedélyezzük az automatikus elindulását, mindkét szerveren.
systemctl enable wg-quick@wg0Megvan a működő tunnelünk, terjesszük hát ki a teljes hálózatra, azaz kössük össze a LAN -okat az AllowedIPs -l.
Szerver 1
nano /etc/wireguard/wg0.conf[Peer]
# Telephely 1
PublicKey = V7tLctnKQOyQf6D3KFkkttD/qZReHklsL9rOrFat8gE=
Endpoint = t1.ddns.com:51821
AllowedIPs = 10.20.0.2/32, 192.168.2.0/24
PersistentKeepalive = 25Szerver 2
nano /etc/wireguard/wg0.conf[Peer]
# Telephely 2
PublicKey = V8tLctnKQOyQf6D3KFkkttD/qZReHklsL9rOrFat9gT=
Endpoint = t2.ddns.com:51821
AllowedIPs = 10.20.0.1/32, 192.168.1.0/24
PersistentKeepalive = 25Indítsuk újra az interfészeket, mindkét szerveren.
wg-quick down wg0
wg-quick up wg0Majd teszteljük a routoket
#Szerver 1
ip route get 192.168.2.1
#Szerver2
ip route get 192.168.1.1Ellenőrizzük, hogy az IPv4 forwarding engedélyezve van-e, ha igen 1 -t kell kapjunk, egyébként engedélyezzük.
sysctl net.ipv4.ip_forwardFailover megvalósítása FRR + OSPF
Most hogy van egy működő Wireguard kapcsolatunk és minden egyes bájtot azon dobálgatunk viszonylag nagy sebességgel, oldjuk meg azt is hogy ha az egyik szerver elesik, a másikat továbbra is el tudjuk érni a lassabb már meglévő OpenVPN kapcsolaton keresztül.
Igen ezt is meg kell oldani, mert jelenleg ha el is érjük a szervert a site-to-site VPN -n keresztül, az a wg0 -s csatornán akar majd válaszolni ami nem fog megérkezni, azaz nem fogjuk elérni.
Erre jó az FRR + OSPF!
Az FRR egy routing szolgáltatás, amely képes a beállított routok között dinamikusan váltani abban az esetben ha az egyik vonal épp kiesik, majd ha visszatér visszavált hogy nekünk ne kelljen, azaz automatizálja a teljes folyamatot.
Telepítsük mindkét szerverre az frr -t
apt install frr frr-pythontools -yEnegdélyezzük az OSPF -t, és ellenőrizzük hogy engedélyezve van az FRR -ben.
sudo sed -i 's/^ospfd=no/ospfd=yes/' /etc/frr/daemons
grep '^ospfd=' /etc/frr/daemonsospfd=yes esetén nincs tennivalónk, amennyiben ez "no" úgy állítsuk át a /etc/frr/daemons -ban.
Indítsuk újra az FRR -t, ellenőrizzük az elindulását.
sudo systemctl restart frr
sudo vtysh -c "show daemons"Kezdődhet a beállítás
A beállítás történhet vtysh terminalból, ebben az esetben a beállítások azonnal érvényesülnek, vagy az /etc/frr/frr.conf fájlt módosításával.
Utóbbi esetben vtysh -b -vel tudjuk betölteni a módosított konfigurációt.
Szerver 1
sudo nano /etc/frr/frr.confrr version 10.5.1
frr defaults traditional
hostname Telephely1
log syslog informational
service integrated-vtysh-config
!
ip route 192.168.2.0/24 192.168.1.1 200
ip route 192.168.20.0/24 192.168.1.1 200
!
ip prefix-list T1-LAN seq 10 permit 192.168.20.0/24
!
route-map OSPF-STATIC permit 10
match ip address prefix-list T1-LAN
!
interface wg0
ip ospf hello-interval 5
ip ospf dead-interval 10
ip ospf network point-to-multipoint non-broadcast
no ip ospf passive
exit
!
router ospf
ospf router-id 10.20.0.2
passive-interface default
network 10.20.0.0/30 area 0.0.0.0
network 192.168.1.0/24 area 0.0.0.0
neighbor 10.20.0.1
redistribute static route-map OSPF-STATIC
exit
!Szerver 2
sudo nano /etc/frr/frr.confrr version 10.5.1
frr defaults traditional
hostname Telephely2
log syslog informational
service integrated-vtysh-config
!
ip route 192.168.1.0/24 192.168.2.1 200
ip route 192.168.10.0/24 192.168.2.1 200
!
ip prefix-list T2-LAN seq 10 permit 192.168.10.0/24
!
route-map OSPF-STATIC permit 10
match ip address prefix-list T2-LAN
!
interface wg0
ip ospf hello-interval 5
ip ospf dead-interval 10
ip ospf network point-to-multipoint non-broadcast
no ip ospf passive
exit
!
router ospf
ospf router-id 10.20.0.2
passive-interface default
network 10.20.0.0/30 area 0.0.0.0
network 192.168.2.0/24 area 0.0.0.0
neighbor 10.20.0.1
redistribute static route-map OSPF-STATIC
exit
!Alkalmazzuk a beállításokat, majd indítsuk újra a szolgálatást mindkét szerveren.
vtysh -b
systemctl restart frrVégül a WireGuard konfigurációban mindkét oldalon le kell tiltani az automatikus útvonalkezelést, hiszen ezt már az FRR végzi.
Alkalmazzuk mindkét szerveren.
sudo nano /etc/wireguard/wg0.conf[Interface]
Table = offIndítsuk újra a kapcsolatokat
sudo wg-quick down wg0
sudo wg-quick up wg0