我需要通过 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 表。
规则的顺序很重要,因此请在匹配的删除规则之前先执行它们