我需要透過 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
我想把流量傳到qqqq就丟OpenVPN伺服器了。為此我這樣做:
iptables:
我在 table mangle 中標記資料包:
sudo iptables -t mangle -A OUTPUT -d q.q.q.q -j MARK --set-mark 2
我發送流量到qqqq丟tun0:
sudo iptables -t nat -A POSTROUTING -d q.q.q.q -j SNAT --to-source 10.8.0.6
ip路由2:
我在 /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,seq 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,seq 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 表。
規則的順序很重要,所以請在匹配的刪除規則之前先取悅他們