Я ищу способ перенаправить весь трафик wlan0 (tcp и udp) через tun0 (openvpn).
Однако весь другой трафик, исходящий от самого устройства, не должен маршрутизироваться через tun0.
Я предполагаю, что это можно реализовать с помощью iptables или route, но ни один из моих вариантов, похоже, не работает.
# route add -net 0.0.0.0 gw 172.27.0.1 dev wlan0
SIOCADDRT: No such process
Информация: это связано с тем, что сервер VPN не является избыточным, и пользователи wlan не очень важны. Однако все службы, работающие на устройстве, довольно важны, и наличие виртуальной машины VPN без SLA - просто плохая идея. Пытаться свести к минимуму вероятность того, что что-то пойдет не так. Таким образом, установка VPN-сервера в качестве шлюза по умолчанию - не вариант. Я также хочу, чтобы все пользователи wlan0 использовали IP-адрес VPN-сервера в качестве внешнего 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
Я считаю, что это должно вас подтолкнуть:
/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).
Я думаю, что это невозможно без TAP-интерфейса для VPN или без использования 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
Определите в / 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 x.y.z.z", если вы хотите указать следующий переход