Как маршрутизировать трафик между туннелями L2TP / IPSec и WireGuard?

У меня есть KVM VPS под управлением Ubuntu 18.04, который одновременно:

  1. L2TP-сервер (xl2tpd + strongswan) с IP 192.168.42.1/24
  2. Клиент Wireguard с IP 192.168.73.3/24 (IP-адрес сервера 192.168.73.1/24)

И L2TP, и Wireguard работают довольно хорошо отдельно друг от друга.

Я хочу разрешить перенаправление трафика от клиентов L2TP на сервер Wireguard, т.е. 192.168.42.x <===> 192.168.73.1

Конфигурация Wireguard на VPS:

~# cat /etc/wireguard/wg0.conf 
[Interface]
PrivateKey = <....>
Address = 192.168.73.3/24

[Peer]
PublicKey = <...>
Endpoint = <....>
AllowedIPs = 192.168.73.0/24
PersistentKeepalive = 15

Сервер L2TP был настроен с помощью этого замечательного скрипта. Он создает следующие правила iptables:

~# iptables --list-rules
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -p udp -m udp --dport 1701 -m policy --dir in --pol none -j DROP
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m multiport --dports 500,4500 -j ACCEPT
-A INPUT -p udp -m udp --dport 1701 -m policy --dir in --pol ipsec -j ACCEPT
-A INPUT -p udp -m udp --dport 1701 -j DROP
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -i ens3 -o ppp+ -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ppp+ -o ens3 -j ACCEPT
-A FORWARD -s 192.168.42.0/24 -d 192.168.42.0/24 -i ppp+ -o ppp+ -j ACCEPT
-A FORWARD -j DROP

Пересылка IP явно включена

~# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

Таблица маршрутизации (с подключенным 1 L2TP-клиентом):

~# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         X.X.X.X         0.0.0.0         UG        0 0          0 ens3
XXX.XXX.XXX.XXX 0.0.0.0         255.255.255.0   U         0 0          0 ens3
X.X.X.X         0.0.0.0         255.255.255.255 UH        0 0          0 ens3
192.168.42.10   0.0.0.0         255.255.255.255 UH        0 0          0 ppp0
192.168.73.0    0.0.0.0         255.255.255.0   U         0 0          0 wg0

XXX - конфиденциальный шлюз и внешние IP-адреса.

Я попытался добавить следующие правила:

~# iptables -D FORWARD -j DROP
~# iptables -A FORWARD -i ppp+ -o wg0 -j ACCEPT    
~# iptables -A FORWARD -i ppp+ -o wg0 -j ACCEPT
~# iptables -A FORWARD -j DROP

Но пересылка ppp0 <===> wg0 все равно не работает.

Какие правила iptables нужно добавить, чтобы разрешить такую ​​пересылку?

1 ответ

Вам нужно добавить маршрут на L2TP VPN-клиентах, который сообщает, что пакеты 192.168.73.0/24 должен быть отправлен через 192.168.42.1.

Кроме того, вам необходимо добавить маршрут на сервере Wireguard, который сообщает, что пакеты 192.168.42.0/24 должен быть отправлен через 192.168.73.3.

Проблема с вашим iptables команда заключается в том, что вы добавляете правила после -j DROPправило. Это означает, что эти правила никогда не выполняются, а пакеты отбрасываются.

Вы должны использовать -I чтобы вставить правила первыми в цепочке.

Вам также необходимо проверить конфигурацию брандмауэра клиента Wireguard.

Другие вопросы по тегам