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

我想通过互联网连接两台服务器。 由于各种原因,我不能使用IPSec。

我希望stream量被透明地encryption,就像我使用IPSec传输模式一样。 我决定使用这个路由(但我打开更好的select)

我的隧道是10.255.255.0/30使用.1 ,B使用.2 。 假设服务器A在192.168.0.100和服务器B 172.16.0.200

虽然我可以添加一条路由来encryption所有stream量(使用A ip route add 172.16.0.200/32 dev tun0 via 10.255.255.2 ),但是这样会杀死隧道,因为OpenVPNstream量使用相同的远程IP来保持隧道。

我需要一种方法来通过eth0路由实际的OpenVPN隧道,否则使用tun0来承载服务器A和B之间的所有stream量。我已经在两台服务器上启用了ip_forward,并且有适当的防火墙规则来允许stream量,但是我不知道从哪里开始在iptables中做到这一点。

我猜你需要的是除了openvpn之外的两个主机之间的所有stream量的附加路由表。 你可以尝试这样的事情:

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

在你的隧道的两边

您应该通过隧道接口和更具体的路由添加到远程networking的路由,以确保您的到远程OpenVPN网关的stream量不会通过隧道接口发送。 例:

 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是添加一个路由到目标networking,而第二个ip route是添加一个主机路由到同一个networking的OpenVPN网关。 172.16.0.1是有效路由到192.168.0.100的网关, eth0是连接到网关的本地接口。 请注意,如果您已经使用routeconfigurationOpenVPN,并push "route ..."语句,那么OpenVPN守护程序在启动/成功build立连接时将添加OpenVPN。