Iptables
通過 Openvpn 隧道路由特定客戶端
我在我的 centos 盒子中執行了 openvpn 客戶端,我將其用作內部網路的路由器。我有兩個介面可以到達外面的世界。
eth0 - normal internet tun0 - openvpn tunnel
我通過放置“route-noexec”選項禁用 opevpn 自動路由拉取,現在我手動處理所有路由。在我打開 openvpn 隧道後,我的路由表是這樣的。
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.80.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0 192.168.44.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.11.0 0.0.0.0 255.255.255.0 U 0 0 0 dummy0 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1 0.0.0.0 192.168.44.1 0.0.0.0 UG 0 0 0 eth0
現在我有一個內部主機,它連接到我的 centos 盒子上的介面 192.168.80.0
192.168.80.50
我需要通過介面 tun0 路由來自該使用者的所有流量,並通過 eth0 路由所有其他流量
我嘗試添加這樣的 POSTROUTING 規則
iptables -t nat -A POSTROUTING -s 192.168.80.50 -o tun0 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
但所有客戶端都只通過 eth0,包括 192.168.80.50。我怎樣才能做到這一點?
為某些 IP 創建路由表:
ip rule add from <sourceIP>/<mask> table <name>
然後聲明一個新的路由來匹配路由表
<name>
:ip route add default via <router> dev tun0 table <name>
為需要使用 VPN 的人提供子網會更容易,因為使用此配置,您需要在表中指定所有 IP
<name>
如果您想通過 VPN 隧道為選定的 VPN 客戶端放置所有流量,您必須在“客戶端”設置此 - 在此使用者配置中。在客戶端配置文件中,它是選項:“redirect-gateway autolocal”。在 VPN 伺服器上,您可能必須為此 VPN 客戶端 IP 設置 SNAT 或 MASQUERADE。