Je cherche un moyen de router tout le trafic wlan0 (tcp et udp) sur tun0 (openvpn).

Cependant, tout autre trafic provenant du périphérique lui-même ne doit pas être acheminé via tun0.

Je suppose que cela pourrait être réalisé en utilisant iptables ou route, mais aucune de mes options ne semble fonctionner.

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

Info : C'est parce que le serveur VPN n'est pas redondant et que les utilisateurs du WLAN ne sont pas vraiment importants. Cependant, tous les services exécutés sur l'appareil sont assez importants et avoir une machine virtuelle VPN sans SLA n'est qu'une mauvaise idée. Essayer de minimiser les chances que quelque chose se passe mal. Donc, définir le serveur VPN comme passerelle par défaut n'est pas vraiment une option. Je souhaite également que tous les utilisateurs de wlan0 utilisent l'adresse IP du serveur VPN comme IP externe.

Modifier avec le script fourni :

[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

Je pense que ça devrait te faire avancer :

/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

C'est exactement ce que j'ai fait dans ma configuration ici. La seule différence est que je voulais router un seul hôte (/32) au lieu d'un réseau entier (/24).

Définir dans /etc/iproute2/rt_tables

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

puis lancez :

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

Cela enverra tout le trafic de 192.168.0.0/24 vers tun0, à l'exception du trafic vers 192.168.0.0/24. Ajoutez "via xyzz" si vous souhaitez spécifier un saut suivant

Je pense que ce n'est pas faisable sans avoir une interface TAP pour le VPN ou faire agir ft-genesi-xxx comme passerelle pour le WLAN.

Si vous pouvez utiliser une interface 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 

Si vous souhaitez utiliser une passerelle, vous devez utiliser un pont comme celui-ci [1] et utiliser les règles iptable ci-dessus afin de ne pas avoir à définir une route par défaut pour l'ensemble du système.

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