OpenVPN 使用真实 IP 的端点到端点

OpenVPN 使用真实 IP 的端点到端点

我想通过互联网将两台服务器连接起来。由于各种原因,我无法为此使用 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 守护程序添加。routepush "route ..."

相关内容