如何在 L2TP/IPSec 和 WireGuard 隧道之间路由流量?

如何在 L2TP/IPSec 和 WireGuard 隧道之间路由流量?

我有一个运行 Ubuntu 18.04 的 KVM VPS,它同时:

  1. 具有 IP 的 L2TP 服务器 (xl2tpd + strongswan)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

VPS 上的 Wireguard 配置:

~# 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 客户端防火墙配置。

相关内容