我有一个非常具体的问题,即构建一个 Linux VPN 端点(带有外部 VPN 网关),该端点应通过隧道路由某些网络,通过默认网关路由其他网络。Linux
VPN 应该对 VPN 对等体的传出连接进行 NAT。
设置如下: 互联网网关 LAN 192.168.25.1/24 VPN 网关 LAN 10.45.99.2/24 (VPN隧道10.45.99.1到网络87.115.17.40/29,单独连接到互联网) Linux VPN 路由器 eth0 192.168.25.71/24 eth0:503 10.45.99.1/24 默认 192.168.25.1 通过 10.45.99.2 路由到 87.115.17.40/29 (send_redirects 已禁用,ip_forward 已启用) Linux 客户端(多个): eth0 192.168.25.x/24 默认 192.168.25.1 通过 192.168.25.71 路由到 87.115.17.40/29
从 VPN 路由器通过隧道 ping 机器正常。
现在我想通过 VPN 网关从我的客户端建立路由,并且客户端数据包被路由到 192.168.25.1!traceroute 输出显示数据包被路由到 192.168.25.71,然后路由到 192.168.25.1。
因此该路线在前进中不受尊重!
IPTables 和路由:
ip 路由显示 87.115.17.40/29 通过 10.45.99.2 dev eth0 10.45.99.0/24 dev eth0 proto 内核范围链接 src 10.45.99.1 192.168.25.0/24 dev eth0 proto 内核范围链接 src 192.168.25.71 默认通过 192.168.25.1 dev eth0 iptables -A 输入 -i eth0:503 -j 拒绝 iptables -t nat -A POSTROUTING -o eth0:503 -j MASQUERADE iptables -A FORWARD -i eth0:503 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A 转发 -s 192.168.25.0/24 -o eth0:503 -j 接受
那么我的设置有什么问题?从本地主机正确选择了路由,但所有客户端都被转发到 Internet 网关。
谢谢你的帮助,马库斯
20121025:至少发现了一个问题:MASQUERADE 总是会掩饰为接口的主 IP。使用 SNAT 时,我能够为 NAT 分配地址(可以是别名地址)。数据包无法路由的问题仍然存在。我正在使用 Debian 6。
在虚拟 Ubuntu 12.04 中尝试使用 SNAT 进行相同设置,最终将其路由。所以 Debian 似乎存在问题,或者是我遗漏了一些设置!
工作设置是(在 Ubuntu 12.04 服务器中):
iptables -t nat -A POSTROUTING -d 87.115.17.40/29 -j SNAT --to-source=10.45.99.1
因此我们必须重新安装服务器,没想到这可能是 Debian 的问题!
可能在内核(2.6.32 -> 3.2.0)和 iptables(1.4.8 -> 1.4.12)之间。