Ich suche nach einer Möglichkeit, den gesamten wlan0-Verkehr (tcp und udp) über tun0 (openvpn) zu leiten.

Der gesamte andere Datenverkehr, der vom Gerät selbst stammt, sollte jedoch nicht über tun0 geleitet werden.

Ich vermute, dies könnte mit iptables oder route realisiert werden, aber keine meiner Optionen scheint zu funktionieren.

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

Info: Dies liegt daran, dass der VPN-Server nicht redundant ist und WLAN-Benutzer nicht wirklich wichtig sind. Alle Dienste, die auf dem Gerät ausgeführt werden, sind jedoch ziemlich wichtig, und eine virtuelle VPN-Maschine ohne SLA ist einfach eine schlechte Idee. Versuchen Sie, die Wahrscheinlichkeit zu minimieren, dass etwas schief geht. Das Festlegen des VPN-Servers als Standard-Gateway ist also nicht wirklich eine Option. Ich möchte auch, dass alle wlan0-Benutzer die IP-Adresse des VPN-Servers als externe IP verwenden.

Bearbeiten Sie mit dem bereitgestellten Skript:

[email protected] ~ # 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
[email protected] ~ # ./test.sh 
RTNETLINK answers: No such process
[email protected] ~ # 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
answer

Ich glaube, das sollte dich weiterbringen:

/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

Genau das habe ich in meinem Setup hier gemacht. Der einzige Unterschied besteht darin, dass ich einen einzelnen Host (/32) anstelle eines ganzen Netzwerks (/24) routen wollte.

Definiere in /etc/iproute2/rt_tables

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

und dann ausführen:

#!/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

Dadurch wird der gesamte Datenverkehr von 192.168.0.0/24 an tun0 gesendet, mit Ausnahme des Datenverkehrs an 192.168.0.0/24. Fügen Sie "via xyzz" hinzu, wenn Sie einen nächsten Hop angeben möchten

Ich denke, dies ist nicht machbar, ohne entweder eine TAP-Schnittstelle für das VPN zu haben oder ft-genesi-xxx als Gateway für das WLAN zu verwenden.

Wenn Sie eine TAP-Schnittstelle verwenden können:

##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 

Wenn Sie ein Gateway verwenden möchten, müssen Sie Bridging wie dieses [1] verwenden und die obigen iptable-Regeln verwenden, damit Sie keine Standardroute für das gesamte System festlegen müssen.

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