← Alle handleidingen

Handleiding Linux

Wat je van ons krijgt

Vervang deze plaatsaanduidingen door de gegevens die je bij je bestelling van FixedIP.be kreeg.

PRIVATE_KEYde private key van je tunnels (geheim houden)
PORTde UDP-poort van onze tunnelservers
ENDPOINT_1het adres van onze tunnelserver in Antwerpen
SERVER_PUBLIC_KEY_1de public key van onze tunnelserver in Antwerpen
TUNNEL_IP_1het tunneladres van je router naar Antwerpen
SERVER_TUNNEL_IP_1het tunneladres aan onze kant in Antwerpen (gateway)
ENDPOINT_2het adres van onze tunnelserver in Zaventem
SERVER_PUBLIC_KEY_2de public key van onze tunnelserver in Zaventem
TUNNEL_IP_2het tunneladres van je router naar Zaventem
FIXED_IPje vaste IPv4-adres
FIXED_SUBNETje IPv4-subnet, bijvoorbeeld /29
IPV6_PREFIXje IPv6-subnet
IPV6_LANeen /64 uit je IPv6-subnet voor je netwerk
TUNNEL_IP6_1het IPv6-tunneladres van je router naar Antwerpen
TUNNEL_IP6_2het IPv6-tunneladres van je router naar Zaventem
LAN_HOSThet interne adres van je server of NAS, bijvoorbeeld 192.168.1.10

Met deze handleiding zet je je vaste IP rechtstreeks op een Linux-server (Debian, Ubuntu, Fedora, ...). De server bouwt twee tunnels op, één naar elke PoP, en schakelt automatisch over als er één wegvalt. Enkel het verkeer van en naar je vaste IP loopt door de tunnels; de rest van het verkeer van de server blijft via je gewone verbinding gaan.

Wil je een Linux-machine als router voor je hele netwerk gebruiken? Lees dan ook Linux als router onderaan.

1. WireGuard installeren

# Debian / Ubuntu
sudo apt install wireguard-tools nftables

# Fedora / RHEL
sudo dnf install wireguard-tools nftables

2. De twee tunnels

Maak /etc/wireguard/fixedip1.conf aan:

[Interface]
PrivateKey = PRIVATE_KEY
Address = TUNNEL_IP_1/32
ListenPort = 51821
MTU = 1420
# Geen routes: welk verkeer door de tunnel gaat, bepaalt stap 3.
Table = off

[Peer]
PublicKey = SERVER_PUBLIC_KEY_1
Endpoint = ENDPOINT_1:PORT
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

En /etc/wireguard/fixedip2.conf, met dezelfde sleutel:

[Interface]
PrivateKey = PRIVATE_KEY
Address = TUNNEL_IP_2/32
ListenPort = 51822
MTU = 1420
Table = off

[Peer]
PublicKey = SERVER_PUBLIC_KEY_2
Endpoint = ENDPOINT_2:PORT
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

Bescherm de bestanden en start beide tunnels:

sudo chmod 600 /etc/wireguard/fixedip1.conf /etc/wireguard/fixedip2.conf
sudo systemctl enable --now wg-quick@fixedip1 wg-quick@fixedip2

3. Je vaste IP en de routering

Het vaste IP komt op een eigen dummy-interface, los van beide tunnels. Antwoorden gaan terug via de tunnel waarlangs de verbinding binnenkwam; nieuw verkeer vanaf je vaste IP gaat via de tunnel die werkt. Maak /usr/local/sbin/fixedip-up aan:

#!/bin/sh
# Vast IP op een eigen interface
ip link add fixedip0 type dummy 2>/dev/null
ip addr replace FIXED_IP/32 dev fixedip0
ip link set fixedip0 up

# Antwoorden via de tunnel waarlangs de verbinding binnenkwam
nft -f - <<'NFT'
table inet fixedip
delete table inet fixedip
table inet fixedip {
    chain pre {
        type filter hook prerouting priority mangle; policy accept;
        iifname "fixedip1" ct state new ct mark set 1
        iifname "fixedip2" ct state new ct mark set 2
    }
    chain out {
        type route hook output priority mangle; policy accept;
        ct mark != 0 meta mark set ct mark
    }
}
NFT
ip route replace default dev fixedip1 table 101
ip route replace default dev fixedip2 table 102
ip rule del fwmark 1 table 101 2>/dev/null; ip rule add fwmark 1 table 101 priority 100
ip rule del fwmark 2 table 102 2>/dev/null; ip rule add fwmark 2 table 102 priority 101
ip rule del from FIXED_IP table 100 2>/dev/null; ip rule add from FIXED_IP table 100 priority 102

# Nieuw verkeer: PoP 1 als die antwoordt, anders PoP 2
/usr/local/sbin/fixedip-failover

En /usr/local/sbin/fixedip-failover:

#!/bin/sh
if ping -c 2 -W 2 -I fixedip1 SERVER_TUNNEL_IP_1 >/dev/null 2>&1; then
    ip route replace default dev fixedip1 table 100
else
    ip route replace default dev fixedip2 table 100
fi

Maak beide uitvoerbaar en laat ze automatisch lopen:

sudo chmod 755 /usr/local/sbin/fixedip-up /usr/local/sbin/fixedip-failover

/etc/systemd/system/fixedip.service:

[Unit]
Description=fixedip.be fixed IP
After=wg-quick@fixedip1.service wg-quick@fixedip2.service
Requires=wg-quick@fixedip1.service wg-quick@fixedip2.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/sbin/fixedip-up

[Install]
WantedBy=multi-user.target

/etc/systemd/system/fixedip-failover.timer (met een gelijknamige .service die ExecStart=/usr/local/sbin/fixedip-failover uitvoert, Type=oneshot):

[Unit]
Description=fixedip.be failover check

[Timer]
OnBootSec=30
OnUnitActiveSec=15

[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now fixedip.service fixedip-failover.timer

4. Je diensten

Een dienst die op alle adressen luistert (0.0.0.0 of ::), is meteen bereikbaar op je vaste IP. Wil je dat een dienst enkel op je vaste IP luistert, laat hem dan binden op FIXED_IP.

Vergeet je firewall niet. Met ufw bijvoorbeeld:

sudo ufw allow in on fixedip1 to FIXED_IP port 443 proto tcp
sudo ufw allow in on fixedip2 to FIXED_IP port 443 proto tcp

Laat ping op de tunnels toe (standaard bij ufw): onze tunnelservers pingen TUNNEL_IP_1 en TUNNEL_IP_2 om te weten welke tunnel werkt. Zonder antwoord sturen we je vaste IP niet naar die tunnel.

5. Ook uitgaand met je vaste IP (optioneel)

Voor een enkel programma kies je het bronadres zelf:

curl --interface FIXED_IP https://ifconfig.me

Moet al het uitgaande verkeer van de server via je vaste IP gaan? Voeg dan aan het einde van fixedip-failover in beide takken een standaardroute met src FIXED_IP toe, bijvoorbeeld ip route replace default dev fixedip1 src FIXED_IP metric 50. Houd er rekening mee dat de server dan ook zijn updates en DNS-verkeer via de tunnels doet.

6. IPv6

Voeg in beide configuratiebestanden het IPv6-tunneladres toe aan Address (TUNNEL_IP6_1/128 en TUNNEL_IP6_2/128), zet een adres uit je subnet op fixedip0 en voeg dezelfde regels toe voor IPv6:

ip -6 addr replace IPV6_LAN::1/128 dev fixedip0
ip -6 route replace default dev fixedip1 table 101
ip -6 route replace default dev fixedip2 table 102
ip -6 rule add fwmark 1 table 101 priority 100
ip -6 rule add fwmark 2 table 102 priority 101
ip -6 rule add from IPV6_PREFIX table 100 priority 102

en in fixedip-failover telkens ook ip -6 route replace default dev fixedip1 table 100 (of fixedip2).

Linux als router

Gebruik je de machine als router voor je netwerk? Zet dan forwarding aan (net.ipv4.ip_forward=1) en voeg een DNAT-regel toe van FIXED_IP naar LAN_HOST. Omdat de antwoorden van LAN_HOST via het netwerk binnenkomen, heb je de markering ook in prerouting nodig:

nft add chain inet fixedip nat '{ type nat hook prerouting priority dstnat; }'
nft add rule inet fixedip nat ip daddr FIXED_IP dnat ip to LAN_HOST
nft add rule inet fixedip pre ct mark != 0 meta mark set ct mark

Heb je een subnet (FIXED_SUBNET)? Zet het dan op een LAN-interface en vervang from FIXED_IP door from FIXED_SUBNET. De toestellen gebruiken hun publieke adres dan rechtstreeks, zonder NAT.

Controleren

sudo wg show
ip rule
ip route show table 100
curl --interface FIXED_IP https://ifconfig.me

Bij beide tunnels moet latest handshake een recent tijdstip tonen, tabel 100 wijst naar fixedip1, en het curl-commando geeft je vaste IP terug.

Failover testen: sudo systemctl stop wg-quick@fixedip1. Binnen een halve minuut wijst tabel 100 naar fixedip2 en blijft je vaste IP bereikbaar. Start de tunnel daarna weer.

Terugdraaien

sudo systemctl disable --now fixedip-failover.timer fixedip.service wg-quick@fixedip1 wg-quick@fixedip2
sudo ip link del fixedip0
sudo nft delete table inet fixedip
sudo rm /etc/wireguard/fixedip1.conf /etc/wireguard/fixedip2.conf /usr/local/sbin/fixedip-up /usr/local/sbin/fixedip-failover
sudo rm /etc/systemd/system/fixedip.service /etc/systemd/system/fixedip-failover.*

Problemen?

  • Geen handshake: controleer ENDPOINT_1/ENDPOINT_2, PORT en de sleutels. Laat uitgaand UDP-verkeer naar PORT toe.
  • Handshake ok, maar verbindingen blijven hangen: zet MTU = 1360 in beide bestanden. Op 4G/5G en sommige glasvezel- of Starlink-verbindingen is 1420 te veel.
  • Inkomende pakketten komen aan maar er gaat niets terug: controleer met ip rule of de regels er staan, en zet eventueel net.ipv4.conf.all.rp_filter=2.

Kom je er niet uit? Mail ons op info@fixedip.be

Klaar voor je vaste IP?

Start vandaag nog en wees overal bereikbaar.