通过 VPN 服务器将流量路由到 Internet 上的某个主机

通过 VPN 服务器将流量路由到 Internet 上的某个主机

我需要通过 VPN 服务器将流量路由到互联网上的某个主机。

配置:

计算机:ubuntu-12.04

eth0-xxxx/24

tun0-inet 地址:10.8.0.6 PtP:10.8.0.5 掩码:255.255.255.255

有 OpenVPN 服务器(亚马逊):

Ubuntu-12.04

eth0-yyyy/24

tun0-inet 地址:10.8.0.1 PtP:10.8.0.2 掩码:255.255.255.255

互联网中有主机IP: qqqq

我想通过 OpenVPN 服务器将流量发送到 qqqq。为此,我执行以下操作:

iptables:

我在表 mangle 中标记数据包:

sudo iptables -t mangle -A OUTPUT -d q.q.q.q -j MARK --set-mark 2

我通过 tun0 向 qqqq 发送流量:

sudo iptables -t nat -A POSTROUTING -d q.q.q.q -j SNAT --to-source 10.8.0.6

iproute2:

我在 /etc/iproute2/rt_tables 中创建了表“100”

sudo ip rule add fwmark 2 table 100
sudo ip route add default via 10.8.0.5 table 100

第一台计算机上的 tcpdump:

14:22:04.554399 IP 10.8.0.6 > qqqq.clodo.ru : ICMP 回显请求,id 11717,序列号 1,长度 64

14:22:04.681918 IP qqqq.clodo.ru > 10.8.0.6 : ICMP 回显答复, id 11717, seq 1, 长度 64

14:22:05.562577 IP 10.8.0.6 > qqqq.clodo.ru : ICMP 回显请求,id 11717,序列号 2,长度 64

14:22:05.690240 IP qqqq.clodo.ru > 10.8.0.6 : ICMP 回显答复, id 11717, seq 2, 长度 64

但没有 ping 通。已发送 2 个数据包,已接收 0 个数据包,100% 数据包丢失。

答案1

你不需要标记数据包,要执行计划,你需要以下内容

在服务器配置文件中添加以下内容:

"push route q.q.q.q 255.255.255.255"

上述操作将把路由推送到客户端,因此从客户端发送到该 IP 的所有流量都将通过 openvpn 隧道发送。

此外,在服务器端,您需要接受来自客户端的传入流量,您可以按照以下步骤接受来自客户端子网的所有流量

iptables -A INPUT -s 10.8.0.0/24 -j ACCEPT

你可能还需要这个不确定:

iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT

您需要对从客户端到服务器端的传入流量进行 nat [在服务器端执行此操作]

iptables -t nat -A POSTROUTING -d q.q.q.q -j SNAT --to-source PUBLIC_IP_OR_YOUR_VPN_SERVER

而且您不需要 iproute2 或 mangle 表。

规则的顺序很重要,因此请在匹配的删除规则之前先执行它们

相关内容