![通过 tun0 路由所有 wlan0 流量](https://linux22.com/image/576475/%E9%80%9A%E8%BF%87%20tun0%20%E8%B7%AF%E7%94%B1%E6%89%80%E6%9C%89%20wlan0%20%E6%B5%81%E9%87%8F.png)
我正在寻找一种方法来通过 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