通过 tun0 路由所有 wlan0 流量

通过 tun0 路由所有 wlan0 流量

我正在寻找一种方法来通过 tun0(openvpn)路由所有 wlan0 流量(tcp 和 udp)。

但是,来自设备本身的所有其他流量都不应通过 tun0 路由。

我猜测这可以通过使用 iptables 或 route 来实现,但我的选项似乎都不起作用。

# route add -net 0.0.0.0 gw 172.27.0.1 dev wlan0
SIOCADDRT: No such process

信息:这是因为 VPN 服务器不是冗余的,而且 wlan 用户并不重要。但是,设备上运行的所有服务都相当重要,而使用没有 SLA 的 VPN 虚拟机是个坏主意。尽量减少出错的可能性。因此,将 VPN 服务器设置为默认网关并不是一个真正的选择。我还希望所有 wlan0 用​​户都使用 VPN 服务器的 IP 地址作为外部 IP。

使用提供的脚本进行编辑:

root@ft-genesi-xxx ~ # route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.27.0.17     0.0.0.0         255.255.255.255 UH    0      0        0 tun0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.13.37.0      0.0.0.0         255.255.255.0   U     0      0        0 wlan0
172.27.0.0      172.27.0.17     255.255.192.0   UG    0      0        0 tun0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
root@ft-genesi-xxx ~ # ./test.sh 
RTNETLINK answers: No such process
root@ft-genesi-xxx ~ # cat test.sh 
#!/bin/sh
IP=/sbin/ip
# replace with the range of your wlan network, or use fwmark instead
${IP} rule add from 10.13.37.0/24 table from-wlan
${IP} route add default dev tun0 via 127.72.0.1 table from-wlan
${IP} route add 10.13.37.0/24 dev wlan0 table from-wlan

答案1

我相信这应该能让你行动起来:

/usr/sbin/ip route add default via 172.27.0.17 dev tun0 table 200
/usr/sbin/ip rule add from 10.13.37.0/24 table 200
/usr/sbin/ip route flush cache

这正是我在此处的设置中所做的。唯一的区别是我想路由单个主机 (/32) 而不是整个网络 (/24)。

答案2

在 /etc/iproute2/rt_tables 中定义

 # I use 200, use a free number:
 200 from-wlan

然后运行:

#!/bin/sh
IP=/sbin/ip
# replace with the range of your wlan network, or use fwmark instead
${IP} rule add from 192.168.0.0/24 table from-wlan
${IP} route add default dev tun0 via x.y.z.z table from-wlan
${IP} route add 192.168.0.0/24 dev wlan0 table from-wlan

这会将来自 192.168.0.0/24 的所有流量发送到 tun0,但发送到 192.168.0.0/24 的流量除外。如果要指定下一跳,请添加“via xyzz”

答案3

我认为如果没有 VPN 的 TAP 接口或让 ft-genesi-xxx 充当 WLAN 的网关,这是不可行的。

如果可以使用 TAP 接口:

##on ft-genesi-xxx:
echo 1 > /proc/sys/net/ipv4/conf/wlan0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp
iptables -t nat -A PREROUTING -i wlan0 -p tcp -j DNAT --to-destination 172.27.0.1
iptables -t nat -A PREROUTING -i wlan0 -p udp -j DNAT --to-destination 172.27.0.1

##on the vpn-server 172.27.0.1 machine:
#replace tapX with the interface the openvpn server uses
/usr/sbin/ip route add 10.13.37.0/24 dev tapX 

如果您想使用网关,那么您需要使用像这样的桥接 [1] 并使用上面的 iptable 规则,这样您就不必为整个系统设置默认路由。

[1]http://tldp.org/HOWTO/Ethernet-Bridge-netfilter-HOWTO-3.html

相关内容