Как маршрутизировать трафик между туннелями L2TP / IPSec и WireGuard?
У меня есть KVM VPS под управлением Ubuntu 18.04, который одновременно:
- L2TP-сервер (xl2tpd + strongswan) с IP
192.168.42.1/24
- Клиент 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.