Ondřej Niesner
NIE0088
Proč WireGuard?
Jednoduchost
Pouze cca 4,000 řádků kódu oproti 100,000+ u OpenVPN. Snazší a jednoduchá konfigurace.
Výkon
Běží přímo v Linux Kernelu. Vysoká propustnost, nízká latence a okamžité navázání spojení.
Bezpečnost
Využívá moderní kryptografii: Noise protocol framework, Curve25519, ChaCha20, Poly1305.
Propustnost
Jak to funguje
Spojení peer-to-peer pomocí veřejných klíčů (podobně jako SSH).
Generace klíčů
Konfigurace serveru (/etc/wireguard/wg0.conf)
# Server Interface
[Interface]
ListenPort = 51818
PrivateKey = AJtgpUswui2PE8s0NzoJ5yFvwmNjPvLpUQqSoLmFnXA=
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT;
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT;
MTU = 1412
# Peer #1
[Peer]
PublicKey = d+OTu1Lkl64AaCoz0VkhH+k49LQgsah5piskNSLvfyI=
PresharedKey = SXDQhiWQFiuFTGcva8aiCndTRKrhsGA/v6rMcZ+IMFw= # dobrovolné
AllowedIPs = 10.0.10.2/32, 2001:1ae9:250:c660::cafe/128
Konfigurace klienta (Laptop/Phone)
# Client Interface
[Interface]
Address = 10.0.0.2/32
PrivateKey = oBos+RVd8z5dvdZoSNZHJGDJy9Ck0SGjXlnrEqueRFA=
DNS = 2001:1ae9:250:c610::1, 192.168.10.1
# Server (Peer)
[Peer]
PublicKey = DCppfiAJ7HEvGVd+BT4vhXuBuuutHt+XF13IK+sm7nc=
PresharedKey = SXDQhiWQFiuFTGcva8aiCndTRKrhsGA/v6rMcZ+IMFw= # dobrovolné
Endpoint = 109.183.184.95:51818
#Endpoint = [2001:1ae9:250:c660::1]:51818
AllowedIPs = 0.0.0.0/0, ::/0 # Směruj vše skrz VPN
PersistentKeepalive = 25
Vysvětlení parametrů
Address
IP adresa a maska rozhraní uvnitř VPN tunelu (např. 10.0.0.1/24).
ListenPort
UDP port, na kterém WireGuard naslouchá (výchozí 51820).
PrivateKey
Tvůj tajný privátní klíč. Nikdy ho nesděluj ostatním.
PublicKey
Veřejný klíč protistrany (peera).
AllowedIPs
Které IP adresy mohou komunikovat tunelem. 0.0.0.0/0 = vše.
Endpoint
Reálná veřejná IP adresa a port serveru, ke kterému se připojuji.
PersistentKeepalive
Interval (v sekundách), kdy se posílá prázdný paket pro udržení spojení přes NAT.
Výpočet MTU
Spuštění pomocí wg-quick
Utilita wg
Konfigurace (Server vs Client)
Server (/etc/wireguard/wg0.conf)
# Server Interface
[Interface]
ListenPort = 51818
PrivateKey = AJtgpUswui2PE8s0NzoJ5yFvwmNjPvLpUQqSoLmFnXA=
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; ...
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; ...
MTU = 1412
# Peer #1
[Peer]
PublicKey = d+OTu1Lkl64AaCoz0VkhH+k49LQgsah5piskNSLvfyI=
PresharedKey = SXDQhiWQFiuFTGcva8aiCndTRKrhsGA/v6rMcZ+IMFw= # dobrovolné
AllowedIPs = 2001:1ae9:250:c660::cafe/128, 2001:1ae9:250:c661::/64
Client (Laptop)
# Client Interface
[Interface]
Address = 2001:1ae9:250:c660::cafe/128, 2001:1ae9:250:c661::/64
PrivateKey = oBos+RVd8z5dvdZoSNZHJGDJy9Ck0SGjXlnrEqueRFA=
DNS = 2001:1ae9:250:c610::1, 192.168.10.1
# Server (Peer)
[Peer]
PublicKey = DCppfiAJ7HEvGVd+BT4vhXuBuuutHt+XF13IK+sm7nc=
PresharedKey = SXDQhiWQFiuFTGcva8aiCndTRKrhsGA/v6rMcZ+IMFw= # dobrovolné
Endpoint = 109.183.184.95:51818
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
Poznámka: AllowedIPs určuje, jaký provoz půjde tunelem. 0.0.0.0/0 znamená "veškerý internetový provoz".
Konfigurace více peerů (klientů)
[Interface]
ListenPort = 51818
PrivateKey = AJtgpUswui2PE8s0NzoJ5yFvwmNjPvLpUQqSoLmFnXA=
...
# Peer #1
[Peer]
PublicKey = d+OTu1Lkl64AaCoz0VkhH+k49LQgsah5piskNSLvfyI=
PresharedKey = SXDQhiWQFiuFTGcva8aiCndTRKrhsGA/v6rMcZ+IMFw=
AllowedIPs = 2001:1ae9:250:c660::cafe/128, 2001:1ae9:250:c661::/64
# Peer #2
[Peer]
PublicKey = 4CDO2oM85Lwx3dSO6hfz9J7aoPmQ3A+nJc9L5qVPxno=
AllowedIPs = 2001:1ae9:250:c660::dead/128
# Peer #3
[Peer]
PublicKey = d+OTu1Lkl64AaCoz0VkhH+k49LQgsah5piskNSLvfyI=
AllowedIPs = 2001:1ae9:250:c660::b00b/128
Test propustnosti pomocí iperf
Test propustnosti pomocí iperf
Mesh
Centralní server
QR
Shrnutí
- ✓ Extrémně rychlý a lehký
- ✓ Moderní kryptografie
- ✓ Jednoduchá konfigurace
- ✓ Multi-platformní (Win, Linux, Mac, Mobile)
Děkuji za pozornost