Ссылки:
https://habr.com/ru/company/xakep/blog/699000/ https://www.wireguard.com/quickstart/ https://manpages.debian.org/unstable/wireguard-tools/wg-quick.8.en.html https://www.procustodibus.com/blog/2021/03/wireguard-allowedips-calculator/
Сервер
0. Устанавливаем: apt install wireguard wireguard-tools 1. Генерируем ключи !!! Генерировать ключи также надо будет на клиенте cd /etc/wireguard umask 077; wg genkey | tee privatekey | wg pubkey > publickey 2. Создаем конфиг /etc/wireguard/wg0.conf ----------------------- ## Set Up WireGuard VPN on Debian By Editing/Creating wg0.conf File ## [Interface] ## My VPN server private IP address ## Address = 10.0.0.1/24 ## My VPN server port ## UDP ListenPort = 51100 ## VPN server's private key i.e. /etc/wireguard/privatekey ## PrivateKey = YOU_PRIVAT_KEY ## Save and update this config file when a new peer (vpn client) added ## ## SaveConfig = true [Peer] ## Desktop/client VPN public key ## PublicKey = YOU_CLIENT_PUBLIC_KEY ## client VPN IP address (note the /32 subnet) ## AllowedIPs = 10.0.0.2/32 ----------------------- 3. Запускаем и проверяем systemctl start wg-quick@wg0 systemctl status wg-quick@wg0
Конфиг для клиента
[Interface] ## This Desktop/client's private key ## PrivateKey = YOU_PRIVAT_KEY ## Client ip address ## Address = 10.0.0.2/24 [Peer] ## Debian 11 server public key ## PublicKey = YOU_SERVER_PUBLIC_KEY ## set ACL ## AllowedIPs = 10.0.0.0/24 ## Your Debian 11 LTS server's public IPv4/IPv6 address and port ## Endpoint = YOU_IP_ADDRESS_SERVER_WG:51100 ## Key connection alive ## PersistentKeepalive = 20
пример конфига с правилами для интерфейсов
!!! в данном примере поднимается NAT и создаются правила в iptables
#`ip route | awk '/default/ {print $5; exit}'` - узнаем имя интерфейса который смотрит в интернет
#`ip addr show $(ip route | awk '/default/ { print $5 }') | grep "inet" | grep -v "inet6" | head -n 1 | awk '/inet/ {print $2}' | awk -F/ '{print $1}'` - узнаем ip интерфейса
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
PostUp = iptables -t nat -A POSTROUTING -o `ip route | awk '/default/ {print $5; exit}'` -j MASQUERADE
PostUp = ip rule add from `ip addr show $(ip route | awk '/default/ { print $5 }') | grep "inet" | grep -v "inet6" | head -n 1 | awk '/inet/ {print $2}' | awk -F/ '{print $1}'` table main
PostUp = iptables -I FORWARD 1 -i `ip route | awk '/default/ {print $5; exit}'` -o wg0 -j ACCEPT
PostUp = iptables -I FORWARD 1 -i wg0 -o ` ip route | awk '/default/ {print $5; exit}'` -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o `ip route | awk '/default/ {print $5; exit}'` -j MASQUERADE
PostDown = ip rule del from `ip addr show $(ip route | awk '/default/ { print $5 }') | grep "inet" | grep -v "inet6" | head -n 1 | awk '/inet/ {print $2}' | awk -F/ '{print $1}'` table main
PostDown = iptables -D FORWARD -i `ip route | awk '/default/ {print $5; exit}'` -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -o ` ip route | awk '/default/ {print $5; exit}'` -j ACCEPT
ListenPort = 51100
FwMark = 0xca6c
PrivateKey = YOU_PRIVAT_KEY
[Peer]
PublicKey = YOU_CLIENT_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32
PersistentKeepalive = 25
[Peer]
PublicKey = YOU_CLIENT_PUBLIC_KEY
AllowedIPs = 10.0.0.3/32
PersistentKeepalive = 25
iptables server
PostUp = iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE PostUp = iptables -I FORWARD 1 -i ens3 -o wg3public -j ACCEPT PostUp = iptables -I FORWARD 1 -i wg3public -o ens3 -j ACCEPT PostUp = iptables -A INPUT -p udp -m udp --dport 62001 -j ACCEPT PostDown = iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE PostDown = iptables -D FORWARD -i ens3 -o wg3public -j ACCEPT PostDown = iptables -D FORWARD -i wg3public -o ens3 -j ACCEPT PostDown = iptables -D INPUT -p udp -m udp --dport 62001 -j ACCEPT
Как отправить весть трафик в тунель wg0 на клиенте
Самый простой способ использовать "ip route" # ip route add 0.0.0.0/0 dev wg0 - вот так вот ничего не заработает Используем трюк например как для openvpn и перенаравим весь трафик в wg0: ip r a 0.0.0.0/1 dev wg0 Использование /1 вместо /0 гарантирует, что он имеет приоритет над маршрутом /0 по умолчанию. P.S не совсем так, просто маска по уже и трафик от сети 10/8 туда за летит. (если надо считайте маску под свои цели) Также мы можем перенаправить лишь один IP в наш wg0 ip r a 195.201.201.32 dev wg0
Пример конфига для клиента с наворачиванием трафика в интерфейс wg0
[Interface] Address = 10.0.0.4/24 DNS = 8.8.8.8, 8.8.4.4 PrivateKey = PRIVAT_KEY_CLIENT PostUp = ip r a 0.0.0.0/1 dev wg0 PostDown = ip r d 0.0.0.0/1 dev wg0 [Peer] PublicKey = PUBLIC_KEY_SERVER_WG AllowedIPs = 0.0.0.0/0 Endpoint = IP_WG_SERVER:PORT_WG_SERVER PersistentKeepalive = 25
PresharedKey
0. генерируем PresharedKey: wg genpsk 1. Редактируем wg0 на клиентах и серверах и добавляем PresharedKey vim wg0.conf -------------- ... [Peer] ## Desktop/client VPN public key ## PresharedKey = YOU_GENERATION_PresharedKey ... -------------
for linux all traffic to WG0
root@yoctoproject:/home# cat /etc/wireguard/wg0.conf [Interface] ## This Desktop/client's private key ## PrivateKey = PRIVAT_KEY_CLIENT PostUp = ip route del default dev enp1s0 PostUP = ip route add default dev wg0 PostUp = ip route add IP_ADDRESS_WG_SERVER via IP_ADDRESS_GATEWAY_ROUTER_CLIENT PostDown = ip route del IP_ADDRESS_WG_SERVER via IP_ADDRESS_GATEWAY_ROUTER_CLIENT dev enp1s0 PostDown = ip route add default via IP_ADDRESS_GATEWAY_ROUTER_CLIENT dev enp1s0 ## Client ip address ## Address = IP_ADDRES_CLIENT_FOR_WG #DNS = 8.8.8.8, 8.8.4.4 [Peer] ## Debian 11 server public key ## PublicKey = PUBLIC_KEY_WG_SERVER ## set ACL ## AllowedIPs = 0.0.0.0/0 ## Your Debian 11 LTS server's public IPv4/IPv6 address and port ## Endpoint =IP_ADDRESS_WG_SERVER:PORT ## Key connection alive ## PersistentKeepalive = 25
Debian 11 генерация QR (каур кода) для wireguard
apt install qrencode qrencode -t ansiutf8 < wg0.conf
Маски для разрешения трафика:
Заворачиваем все: AllowedIPs = 0.0.0.0/0 Примеры всех масок: AllowedIPs = 1.0.0.0/8, 2.0.0.0/8, 3.0.0.0/8, 4.0.0.0/6, 8.0.0.0/7, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/3, 160.0.0.0/5, 168.0.0.0/6, 172.0.0.0/12, 172.32.0.0/11, 172.64.0.0/10, 172.128.0.0/9, 173.0.0.0/8, 174.0.0.0/7, 176.0.0.0/4, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4 Принципе счастье: AllowedIPs = 0.0.0.0/1, 128.0.0.0/1, ::/1, 8000::/1