Ссылки:
1 2 3 4 |
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/ |
Сервер
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
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 |
Конфиг для клиента
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[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 |
пример конфига с правилами для интерфейсов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
!!! в данном примере поднимается 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
1 2 3 4 5 6 7 8 |
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 на клиенте
1 2 3 4 5 6 7 8 9 |
Самый простой способ использовать "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
1 2 3 4 5 6 7 8 9 10 11 |
[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
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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
1 2 |
apt install qrencode qrencode -t ansiutf8 < wg0.conf |