我需要通过VPN服务器路由到Internet上的某些主机。
组态:
电脑:ubuntu-12.04
eth0 – xxxx / 24
tun0 – inet addr:10.8.0.6 PtP:10.8.0.5掩码:255.255.255.255
有OpenVPN服务器(亚马逊):
Ubuntu的12.04
eth0 – yyyy / 24
tun0 – inet addr:10.8.0.1 PtP:10.8.0.2掩码:255.255.255.255
互联网上有主机:qqqq
我想stream量到qqqq去扔OpenVPN服务器。 为此我做:
iptables的:
我在表格中标记数据包:
sudo iptables -t mangle -A OUTPUT -d qqqq -j MARK --set-mark 2
我发送stream量到qqqq扔tun0:
sudo iptables -t nat -A POSTROUTING -d qqqq -j SNAT --to-source 10.8.0.6
iproute2的:
我在/ etc / iproute2 / rt_tables中创build表“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回应请求,编号11717,seq 1,长度64
14:22:04.681918 IP qqqq.clodo.ru> 10.8.0.6:ICMP回应答复,编号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,序列2,长度64
但没有平。 2个数据包传输,0个接收,100%丢包
你不需要标记数据包,做什么刨你需要以下内容
在服务器configuration文件中添加以下内容:
"push route qqqq 255.255.255.255"
以上将把路由推送到客户端,所有从客户端发送到该ip的stream量将通过openvpn隧道发送。
同样在服务器端,您需要接受客户端传入的stream量,您可以接受来自客户端子网的所有stream量,如下所示
iptables -A INPUT -s 10.8.0.0/24 -j ACCEPT
你可能也需要这个不确定:
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
你需要nat从客户端到服务器端来回stream量[在服务器端做这个]
iptables -t nat -A POSTROUTING -d qqqq -j SNAT --to-source PUBLIC_IP_OR_YOUR_VPN_SERVER
而且你不需要iproute2或者mangle表。
规则的顺序很重要,所以在匹配的放下规则之前请他们