我想通过互联网将两台服务器连接起来。由于各种原因,我无法为此使用 IPSec。
我希望流量能够像使用 IPSec 传输模式一样透明地加密。我已决定为此使用路由(但我愿意接受更好的替代方案)
我的隧道在 上10.255.255.0/30
,A 使用.1
,B 使用.2
。假设服务器 A 位于192.168.0.100
,服务器 B位于172.16.0.200
。
虽然我可以添加一条路由来加密所有流量(在 A 上使用ip route add 172.16.0.200/32 dev tun0 via 10.255.255.2
),但这样做会终止隧道,因为 OpenVPN 流量使用相同的远程 IP 来保持隧道畅通。
我需要一种方法来路由实际的 OpenVPN 隧道eth0
,但除此之外,还用于tun0
承载服务器 A 和 B 之间的所有流量。我在两台服务器上都启用了 ip_forward,并设置了适当的防火墙规则以允许流量,但我不知道在 iptables 中从哪里开始来实现这一点。
答案1
我猜你需要的是除 openvpn 之外的 2 个主机之间所有流量的附加路由表。你可以尝试以下方法:
iptables -t mangle -A OUTPUT -d 172.16.0.200/32 -p <vpn_protocol> ! --dport <vpn_port> -j MARK --set-mark 2
ip route add default via 10.255.255.2 dev tun0 table 2
ip rule add fwmark 2 table 2
在你的隧道两边
答案2
您应该通过隧道接口添加到远程网络的路由,以及更具体的路由,以确保到远程 OpenVPN 网关的流量不会通过隧道接口发送。示例:
ip route add 192.168.0.0/24 via 10.255.255.2 dev tun0
ip route add 192.168.0.100 via 172.16.0.1 dev eth0
第一个ip route
是添加到目标网络的路由,而第二个ip route
是添加到位于同一网络的 OpenVPN 网关的主机路由。172.16.0.1
是具有到 192.168.0.100 的有效路由的网关,eth0
是连接到与网关相同的网络的本地接口。请注意,如果您已使用和语句ip route
配置 OpenVPN,则第一个是不必要的,因为它将在启动/成功设置连接时由 OpenVPN 守护程序添加。route
push "route ..."