[IPTABLES] avoir l'IP source externe avec PREROUTING

Tags: #<Tag:0x00007f63e53d8420>

Rien avoir avec le protocole HTTP, c’est du SIP …

C’est presque pareil, c’est du streaming, une session par annoncement de demande pour ne pas multicaster en permannance tout les ports du/des routeurs et surcharger le réseaux interne et en l’occurrence aussi le réseau mondial.

Çà doit passer dans la couche IGMP (v3) Internet Group Management Protocol qui fait partit des Internet layer protocols (Protocoles de la couche Internet).

Presque sauf que du SIP, la partie signalisation c’est TCP ou UDP mais le RTP c’est UDP …

L’utilisation du routage avancé n’est pas triviale, il y a plein de petits pièges abscons (jeu de mots volontaire) à éviter.
N’hésite pas à demander si tu as des doutes, des questions…

1 J'aime

Tu peut lire çà si ça t’intéresse :slight_smile:

RFC6157 : IPv6 Transition in the Session Initiation Protocol

Ca donne toujours de bonnes informations le même protocole en version IPv6 → donc amélioré… plus rapide, plus direct, plus ciblé :wink:

Bonne soirée.

Pascal, je pense que je avoir besoin de ton aide.

Voici ce que je veux faire

iptables -A PREROUTING -t mangle -p tcp --dport 5058 -j MARK --set-mark 200
echo 200 interphone >> /etc/iproute2/rt_tables
ip rule add fwmark 200 table interphone
ip route add -host 192.168.1.242 gw 192.168.1.240 table interphone

Sauf que la derniere ligne ne fonctionne pas.

ip route show
0:      from all lookup local
32765:  from all fwmark 0xc8 lookup interphone
32766:  from all lookup main
32767:  from all lookup default
sudo route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
0.0.0.0         192.168.1.254   0.0.0.0         UG    0      0        0 eno1
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 wg0
10.243.0.0      0.0.0.0         255.255.255.0   U     0      0        0 ztkseufe5j
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eno1

j’ai une table de routage pour wireguard, zerotier et docker

Mais je bloque ici surement à cause de la deniere

ip route add -host 192.168.1.242 gw 192.168.1.240 table interphone
Error: any valid prefix is expected rather than "-host"

Donc impossible de finaliser le routage.
Et aussi impossible de verifier que iptables a bien pris en compte (je ne vois pas la ligne avec sudo iptables -t nat -v -L PREROUTING -n --line-number)
Est ce qu’il y a une astuce? un truc que j’ai loupé?

Tu as mélangé la syntaxe de ip route et de route. Utilise seulement ip et laisse tomber route qui n’est pas adapté au routage avancé.
D’autre part tu te trompes de cible. Il faut faire du routage avancé sur le trafic sortant de l’interphone, et non sur le trafic entrant du serveur. Un conseil : avant d’écrire des règles et des routes, décris en détail ce que tu veux faire.

Normal, la règle est dans la table « mangle ».

port-forwarding-linux

Voila ce que je veux faire, il faut que le serveur 192.168.1.240 soit la passerelle de tous les paquets allant et venant de 192.168.1.242 avec ton IP externe non modifié

Pour le trafic « aller » du serveur vers l’interphone, il n’y a rien de particulier à mettre en place.
C’est uniquement le trafic SIP et RTP « retour » de l’interphone qui doit être routé via le serveur.
Première action : caractériser ce trafic retour.
Deuxième action : définir un ou plusieurs critères (adresse source, adresse destination, protocole, port source, port destination, TOS, marque de connexion…) pour identifier les paquets de ce trafic retour et le différencier des autres paquets émis par l’interphone.
Troisième action : mettre en place de la table de routage spécifique, de la règle de routage avancé qui pointe dessus et éventuellement en fonction des critères choisis de la règle iptables qui marque les paquets à router selon cette règle.
C’est toi et toi seul qui connais ton trafic et peux effectuer les deux premières actions.

Ce serait pas plus simple de gérer en ipv6 directement ?

Je ne vois pas en quoi ce serait plus simple.
Est-ce que tu ne veux pas plutôt dire que ce serait plus simple d’utiliser des adresses IP publiques pour éviter de faire du NAT ?

Oui ce serait plus simple pour gérer les accès et éventuellement le bannissement des pénibles sans passer par l’étape du NAT