
Можно ли настроить сервер Wireguard таким образом, чтобы через Wireguard туннелировался только список IP-адресов [A, B, C,...], а остальной трафик игнорировался и проходил через интерфейс, отличный от Wireguard?
Другими словами, я пытаюсь предоставить доступ к Wireguard VPN некоторым внешним пользователям, но не хочу, чтобы они могли использовать VPN для просмотра других IP-адресов/сайтов, кроме тех, которые я указал (при этом позволяя им делать все, что они захотят, через их собственный не-VPN-интерфейс/подключение).
Спасибо
решение1
Вы можете использовать iptables.
Замените eth0
на сетевой интерфейс, который подключается к интернету, и 10.6.0.1/24
на вашу клиентскую подсеть.
Вставьте это где-нибудь в конфигурации Wireguard ниже [ИНТЕРФЕЙС]
# Drop all outgoing packets from the client subnet
PreUp = iptables -I FORWARD -s 10.6.0.1/24 -o eth0 -j DROP
## Add your exceptions here
Например:
[Interface]
PrivateKey = ...
Address = 10.6.0.1/24
MTU = 1420
ListenPort = 51820
## Before interface wg0 is up
# Drop all outgoing packets from the client subnet
PreUp = iptables -I FORWARD -s 10.6.0.1/24 -o eth0 -j DROP
# Allow clients to connect to the local network 192.168.0.1/24
PreUp = iptables -I FORWARD -s 10.6.0.1/24 -d 192.168.0.1/24 -j ACCEPT
# Allow clients to connect to tcp port 80 (usually http) on 10.10.0.5
PreUp = iptables -I FORWARD -s 10.6.0.1/24 -d 10.10.0.5 -p tcp --dport 80 -j ACCEPT
## After interface wg0 is down
PostDown = iptables -D FORWARD -s 10.6.0.1/24 -o eth0 -j DROP
PostDown = iptables -D FORWARD -s 10.6.0.1/24 -d 192.168.0.1/24 -j ACCEPT
PostDown = iptables -D FORWARD -s 10.6.0.1/24 -d 10.10.0.5 -p tcp --dport 80 -j ACCEPT
[Peer]
...
Для бесперебойной работы на стороне клиента вам также необходимо настроить AllowedIPs
в конфигурации клиента. В противном случае клиенты будут пытаться использовать VPN для доступа в Интернет, и эти запросы просто будут истекать по тайм-ауту.
Следуя приведенному выше примеру, конфигурация клиента может выглядеть следующим образом:
[Interface]
PrivateKey = ...
Address = 10.6.0.2/24
DNS = 10.6.0.1
[Peer]
PublicKey = ...
AllowedIPs = 192.168.0.1/24, 10.10.0.5
Endpoint = ...
PresharedKey = ...
Документация: