# [iptables] routage d'un port

## Chr0nos

Salut a tous,

voila j'essaie de faire passer le trafic sortant vers le port 80 (donc ma navigation internet) par mon interface tun0 (un vpn) , et tout le reste par eth0

mais voila: pour le moment rien de ce que je n'ai fait ne marche et je ne comprends pas trop pourquoi:

 *Quote:*   

> StarK ~ # ifconfig
> 
> eth0      Link encap:Ethernet  HWaddr 1c:6f:65:35:f1:9f
> 
>           inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
> ...

 

coté iptables j'ai mis:

 *Quote:*   

> StarK ~ # iptables -t nat -S
> 
> -P PREROUTING ACCEPT
> 
> -P INPUT ACCEPT
> ...

 

(je ne sais pas du tout ce que fais MASQUERADE mais sur pas mal de site ils disent de le metre alors...)

j'ai bien activé l'ip forwarding dans le kernel:

 *Quote:*   

> StarK ~ # cat /proc/sys/net/ipv4/ip_forward
> 
> 1
> 
> 

 

j'avoue ne plus trop savoir ou donner de la tête la et un coup de main serais rudement apprécié   :Rolling Eyes: 

----------

## gregool

Salut,

j'utilise openvpn et pour router le traffic internet a travers le tunnel vpn j'utilise l'option :

```
push "redirect-gateway def1" 
```

dans openvpn.conf sur le serveur.

ça route tout le traffic vers le tunnel, à adapter à ta config

----------

## Chr0nos

le probleme est la justement, je ne veu pas avoir tout le trafic qui passe par le vpn car celui ci est plutot "lent" et donc facilement saturable  :Sad: 

----------

## truc

C'est pas du DNAT, à priori que tu veux faire, sinon, ça change l'adresse de destination et donc t'iras jamais voir le site que tu souhaites  :Wink: 

Bref, pourquoi juste http? y'a aussi https, puis, si tu mets pas les requètes DNS, tu perds également en terme de vie privée!

J'pense que tu devrais faire du MARK en OUTPUT dans la table mangle, puis, avec iproute2, tu te fais une jolie table de routage alternative, que tu remplies mais avec la route par défaut passant par ton tunnel, ensuite tu ajoutes des règles (ip rules add fwmark machin) et le tour est joué, enfin, je pense!

C'est juste le traffic généré localement c'est bien ça? Sinon, faut adapter un peu, (chaine PREROUTING, ajout de route sur l'autre côté de ton vpn ou alors SNAT effectivement (avec l'adresse tun "locale"))

----------

## guilc

Effectivement, comme dit truc, il n'y a pas 40 solutions. Se contenter de iptables ne marche pas.

Il faut :

1) marquer les paquets avec iptables (si dport == 80 alors marquer)

2) construire une table de routage plus complexe : si paquet marqué, alors passer par le VPN, sinon, route par défaut. En gros, il faut faire 2 tables de routage, et aiguiller sur l'une ou l'autre en fonction du marquage. Tu peux t'inspirer de là, en customisant les "ip rule" : http://lartc.org/howto/lartc.rpdb.multiple-links.html

----------

## Chr0nos

du coup si je veu pouvoir marques paquets je dois faire:

iptables -A FORWARD -i eth0 -o tun0 -p tcp -m tcp --dport 80 -j MARK

iptables -A FORWARD -i eth0 -o tun0 -p tcp -m tcp --sport 80 -j MARK

( a la place de forward je ne devrais pas du coup me metre sur le OUTPUT ?)

toutefois j'ai un serveur apache2 sur ma machine qui utilise le port 80, mais si je ne met pas dport et sport je ne vais pas pouvoir recup la réponse du site non ? enfin quoi que tout se passe dans un seul socket, donc techniquement si je met juste le -dport ca pourais marcher non ?

par contre pour ce qui es de ip route je ne comprends pas du tout la syntaxe: quand je fais: ip route j'ai 

 *Quote:*   

> StarK ~ # ip route
> 
> default via 192.168.0.254 dev eth0  proto static
> 
> 10.1.0.1 via 10.1.22.237 dev tun0  proto static
> ...

 

et je dois reconaitre que le manuel de "ip" n'est pas tres clair pour le néophite avec cet outil que je suis...

----------

