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 -y

Majd 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_KEY

Szerver 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_KEY

Indí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.1

Ha minden működik engedélyezzük az automatikus elindulását, mindkét szerveren.

systemctl enable wg-quick@wg0

Megvan 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 = 25

Szerver 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 = 25

Indítsuk újra az interfészeket, mindkét szerveren.

wg-quick down wg0
wg-quick up wg0

Majd teszteljük a routoket

#Szerver 1
ip route get 192.168.2.1

#Szerver2
ip route get 192.168.1.1

Ellenő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_forward

Failover 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 -y

Enegdé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/daemons

ospfd=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.conf
rr 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.conf
rr 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 frr

Vé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 = off

Indítsuk újra a kapcsolatokat

sudo wg-quick down wg0
sudo wg-quick up wg0

← Vissza: Linux