我的环境情况如下:
有一个网络(213.213.213.128/26)和一个 VPN 网关(213.213.213.155)。
AWS 上有一个远程网络(10.42.0.16/28),它通过 AWS VPC VPN 与 213.213.213.128/26 连接,该 VPN 在 10.42.0.30 上有一个 RADIUS 服务器。
我希望外部客户端使用 VPN 网关 213.213.213.155 通过 10.42.0.30 进行身份验证来连接到 213.213.213.128/26。
我的问题是,213.213.213.155 无法到达 10.42.0.30,因为它通过错误的接口发送。当我添加
iptables -t nat -A POSTROUTING -s <address of the tunnel interface> -d 10.42.0.16/28 -j SNAT --to-source 213.213.213.155
我可以 ping 10.42.0.30,但是 RADIUS 数据包无法通过隧道传输。
我该如何更改网络配置才能允许网关 (213.213.213.155) 连接到 10.42.0.16/28 中的主机?
我使用 strongswan 作为 VPN 服务器。-I 213.213.213.155
无需 iptables 规则,即可成功 ping。
编辑
路由表如下:
10.0.0.0/8 dev Tunnel1 scope link metric 100
10.0.0.0/8 dev Tunnel2 scope link metric 200
213.213.213.128/26 dev eno1 proto kernel scope link src 213.213.213.155
169.254.21.173 dev Tunnel1 proto kernel scope link src 169.254.21.174
169.254.21.233 dev Tunnel2 proto kernel scope link src 169.254.21.234
修改路由表以:
10.0.0.0/8 dev Tunnel1 scope link metric 100 src 213.213.213.155
10.0.0.0/8 dev Tunnel2 scope link metric 200 src 213.213.213.155
213.213.213.128/26 dev eno1 proto kernel scope link src 213.213.213.155
169.254.21.173 dev Tunnel1 proto kernel scope link src 169.254.21.174
169.254.21.233 dev Tunnel2 proto kernel scope link src 169.254.21.234
允许 ping 操作在没有 -I 的情况下通过,但traceroute
找不到到主机的路由。tracepath
没有得到回复。
答案1
解决此类问题的首选方法是设置正确的路由条目。如果您无法访问某个系统上的路由表条目,则可以使用 iptables。
因此理想情况下,您应该在 213.213.213.155 上通过 213.213.213.155 获得到 10.42.0.16/28 的路由,并在 10.42.0.30 上通过本地 VPN 网关获得到 213.213.213.128/26 的路由。
如果您无法更改 RADIUS 服务器上的路由表,因此需要 iptables,请确保规则适用于发送的 RADIUS 数据包。使用tcpdump
监视接口上的 RADIUS 数据包any
并记下源地址和目标地址。
iptables
将规则限制为的目的是什么-s <address of the tunnel interface>
?只需删除该选项就足以使其起作用。
由于您可以使用iptables
,因此您应该能够设置路由条目。尝试
ip route add 10.42.0.16/28 src 213.213.213.155
这应该足以分配正确的源地址,而无需使用 选项-I
,ping
并且它应该将源地址用于其他所有连接,包括 RADIUS。通常,VPN 软件应该足够智能,无需额外配置即可设置某些功能。如果这不起作用,您可能需要
ip route add 10.42.0.16/28 dev tun0 src 213.213.213.155
tun0
你的 VPN 接口在哪里?