Pages : 1
#1 Le 08/04/2019, à 17:41
- nicolas84
Utiliser une autre passerelle pour un port spécifique
Bonjour,
Mon réseau est composé :
192.168.1.1 : box 4G (dhcp off)
192.168.1.2 : box ADSL (dhcp off)
192.168.1.200 : UbuntuServer
DHCP est gérer par UbuntuServer, certains appareils ont comme passerelle l'ADSL et d'autres la 4G. Pas de problèmes de ce côté là.
Sur mon serveur, je veux que la passerelle par défaut soit la connexion 4G (pour le débit). Le problème est que l'accès par l'extérieur est impossible (mon FAI 4G utilise une adresse ip privé en 10.).
Je voudrais accéder à mon serveur en ssh par exemple mais cela ne fonctionne que si la passerelle de la box ADSL est 1er (metrique le plus bas dans ip route), et donc la connexion internet 80 passe aussi par l'ADSL.
J'aimerais laissé la passerelle sur la box 4G tout en forçant 22 à passer par la box ADSL.
Merci par avance de votre aide
SERVER : Ubuntu Server 18.04 64bit - Intel Core i3-3220 - 12GB RAM
DESKTOP : Windows 10 - Intel Core Quad Q9550 - 8GB RAM
Hors ligne
#2 Le 09/04/2019, à 07:33
- Iamawalrus
Re : Utiliser une autre passerelle pour un port spécifique
Le problème réside dans le fait que la Box 4G ne laisse rien passer de toute manière (à moins qu'il y ait une option qui permet de s'en servir que comme passerelle ? Mais faudrait voir dans ses réglages). Alors je ne vois pas comment tu veux t'en sortir en passant par cette dernière.
Sinon voir du côté de ton FAI s'ils ont un forfait 4G pro qui permet les redirections. Je crois que chez Bouygues ils font ça (du moins ils le faisaient à l'époque).
"Tout le rêve de la démocratie est d'élever le prolétaire au niveau de bêtise du bourgeois."
Hors ligne
#3 Le 09/04/2019, à 07:47
- nicolas84
Re : Utiliser une autre passerelle pour un port spécifique
Merci de ta réponse.
Justement j'aimerais sortir par l'ADSL du coup. Mais laisser la 4G pour les mises a jour, les sauvegardes....
SERVER : Ubuntu Server 18.04 64bit - Intel Core i3-3220 - 12GB RAM
DESKTOP : Windows 10 - Intel Core Quad Q9550 - 8GB RAM
Hors ligne
#4 Le 09/04/2019, à 08:05
- bruno
Re : Utiliser une autre passerelle pour un port spécifique
Bonjour,
Regarde la réponse ici : https://superuser.com/questions/1010513 … ic-gateway
Le principe consiste à marquer les paquets qui arrivent sur le port 22 avec iptables et à créer une route spécifique pour ces paquets avec iproute2.
#5 Le 09/04/2019, à 08:10
- Iamawalrus
Re : Utiliser une autre passerelle pour un port spécifique
Vu comme ça, je dirais avec un petit script (avec un cron) qui active ta connexion, fait les mises à jours et les sauvegardes et qui te rebascule sur l'autre interface.
Mais entre ton premier et ton deuxième message, j'avoue que je ne suis pas sûr de bien comprendre.
"Tout le rêve de la démocratie est d'élever le prolétaire au niveau de bêtise du bourgeois."
Hors ligne
#6 Le 09/04/2019, à 10:44
- nicolas84
Re : Utiliser une autre passerelle pour un port spécifique
Bonjour Bruno,
Merci pour ta réponse.
J'ai regardé ton lien et l'ai adapté à mon cas :
sudo iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1
sudo ip route add default via 192.168.1.2 dev enp0s3 table 42
sudo ip rule add fwmark 1 table 42
Je n'ai rien de plus qu'avant dans :
ip route
et
sudo iptables --list
Es-ce normal ? Cela ne fonctionne pas pour le moment.
---------------------
@Iamawalrus
Désolé pour mon manque de clarté...
Je voudrais laisser ma passerelle par défaut en 192.168.1.1 tout le temps.
Dit autrement : je voudrais que ssh n'utilise pas la passerelle par défaut mais une autre (192.168.1.2).
Merci de votre aide !!
SERVER : Ubuntu Server 18.04 64bit - Intel Core i3-3220 - 12GB RAM
DESKTOP : Windows 10 - Intel Core Quad Q9550 - 8GB RAM
Hors ligne
#7 Le 09/04/2019, à 12:07
- bruno
Re : Utiliser une autre passerelle pour un port spécifique
Il faut que ta machine soit autorisée à router les paquets, voir le retour de :
cat /proc/sys/net/ipv4/ip_forward
Et je pense qu'il manque l'ajout de la table '42' dans /etc/iproute2/rt_tables (voir http://www.tldp.org/HOWTO/Adv-Routing-H … lter.html).
Pour voir la table mangle :
sudo iptables -L -t mangle
Pour le reste je ne sais pas…
#8 Le 09/04/2019, à 13:33
- nicolas84
Re : Utiliser une autre passerelle pour un port spécifique
cat /proc/sys/net/ipv4/ip_forward
Retourne 0
J'ai donc autorisé à router les paquets :
sysctl -w net.ipv4.ip_forward=1
Pour que cela soit permanent :
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
Ensuite j'ai donc fait :
root@server_test:~# echo 1 perso >> /etc/iproute2/rt_tables
root@server_test:~# sudo iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1
root@server_test:~# ip rule add fwmark 1 table perso
root@server_test:~# ip route add default via 192.168.1.2 dev enp0s3 table perso
root@server_test:~# ip route list table perso
default via 192.168.1.2 dev enp0s3
root@server_test:~# cat /proc/sys/net/ipv4/ip_forward
1
root@server_test:~# sudo iptables -L -t mangle
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
MARK tcp -- anywhere anywhere tcp dpt:ssh MARK set 0x1
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Mais cela ne fonctionne toujours pas. Je ne vois pas ce qui bloque.
De plus toutes ses commandes ne sont pas persistante, elles sont annulés après redémarrage (encore ça ce n'est pas trop grave, je peux les automatiser au démarrage..).
Merci encore votre aide !
[Edit] :
Je viens de m’apercevoir que lorsque je fais ma demande de connexion ssh depuis un autre poste, il apparait dans netstat une ligne avec server_test:ssh et l'adresse ip publique de l'autre poste. "State" reste en revanche sur SYN_RECV
Dernière modification par nicolas84 (Le 09/04/2019, à 14:44)
SERVER : Ubuntu Server 18.04 64bit - Intel Core i3-3220 - 12GB RAM
DESKTOP : Windows 10 - Intel Core Quad Q9550 - 8GB RAM
Hors ligne
#9 Le 09/04/2019, à 14:17
- bruno
Re : Utiliser une autre passerelle pour un port spécifique
ip route add default via 10.0.0.2 dev enp0s3 table perso
Tu es sûr de ta passerelle ? D'après ton premier message ce serait plutôt 192.168.1.2, mais tu fais peut-être des essais depuis une autre machine…
Ici il y a une discussion sur un cas similaire au tien, mais plus complexe, j'ai essayé d’adapter le script donné en solution à ton cas :
#!/bin/bash
# Reset/Flush iptables
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
#Reset/Flush/Setup IP Route (table perso)
ip route flush table perso
ip route show table main | grep -Ev ^default | while read ROUTE ; do ip route add table perso $ROUTE ; done
ip route add table perso default via 192.168.1.2
#Mark Packet with matching D.Port
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1
#IP Route
ip rule add fwmark 1 table perso
ip route flush cache
#IP Stack
#This is the missing part from the guide
echo 1 > /proc/sys/net/ipv4/ip_forward
for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 0 > $f ; done
echo 0 > /proc/sys/net/ipv4/route/flush
Dernière modification par bruno (Le 10/04/2019, à 08:45)
#10 Le 10/04/2019, à 08:11
- nicolas84
Re : Utiliser une autre passerelle pour un port spécifique
Oui désolé, je faisais des test sur une autre machine, mes passerelles était bien OK. J'ai modifié mon message pour que cela reste cohérent.
J'ai tenté ton script, tout fonctionne bien, mais je reste bloqué, les connexions reste à l'état SYN_RECV...
SERVER : Ubuntu Server 18.04 64bit - Intel Core i3-3220 - 12GB RAM
DESKTOP : Windows 10 - Intel Core Quad Q9550 - 8GB RAM
Hors ligne
#11 Le 10/04/2019, à 09:17
- bruno
Re : Utiliser une autre passerelle pour un port spécifique
Je ne fais que copier des solutions trouvées ailleurs parce que cela dépasse mes compétences en matière de réseau
Le fais que les connexions soit bloqués avec SYN_RECV montre bien qu'il y a un problème de routage des paquets.
Je me demande s'il n'y aurait pas une autre solution en créant une interface réseau virtuelle, exemple avec /etc/network/interfaces :
auto enp0s3
iface enp0s3 inet static
address 192.168.1.200
netmask 255.255.255.0
gateway 192.168.1.1
iface enp0s3:1 inet static
address 192.168.1.201
netmask 255.255.255.0
gateway 192.168.1.2
On a donc une interface virtuelle enp0s3:1 avec une autre adresse IP et une autre passerelle.
Maintenant le serveur SSH peut être configuré pour n'écouter que sur cette interface /etc/ssh/sshd_config :
ListenAddress 192.168.1.201
#12 Le 10/04/2019, à 10:36
- nicolas84
Re : Utiliser une autre passerelle pour un port spécifique
Cela fonctionne mais maintenant tout passe par l'ADSL
Dans la table de routage, 192.168.1.2 à un métrique moins élevée que 192.168.1.1
Peut être parce que je dois forcer le lancement de l'interface virtuelle au démarrage ?
ifup enp0s3:1
SERVER : Ubuntu Server 18.04 64bit - Intel Core i3-3220 - 12GB RAM
DESKTOP : Windows 10 - Intel Core Quad Q9550 - 8GB RAM
Hors ligne
#13 Le 10/04/2019, à 11:23
- bruno
Re : Utiliser une autre passerelle pour un port spécifique
Oui mon idée n'était sans doute pas bonne…
Peu-être faudrait-il ajouter des règles iptables qui bloquent tout le trafic arrivant sur enp0s3:1 sauf pour le port 22. Sinon on tourne en rond parc qu'il va falloir jouer avec les routes et les règles iptables
#14 Le 10/04/2019, à 15:39
- nicolas84
Re : Utiliser une autre passerelle pour un port spécifique
Dommage, ça aurait pu marcher...
Si vraiment je trouve pas je ferais tourner une machine virtuelle connecté à la passerelle ADSL et donc accessible de l’extérieur.... Mais j'aimerais vraiment trouvé une solution...
Merci encore pour ton aide !
J'ai trouvé autre chose de plus simplifié :
#referencer la nouvelle table de routage
echo "4 perso" >> /etc/iproute2/rt_tables
#ajout d'une regle
ip rule add fwmark 4 table perso
#remplissage de la table "perso"
ip route add default via 192.168.1.2 dev enp0s3 table perso
#Marquer les paquets avant le routage
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 4
iptables -t mangle -A INPUT -p tcp --dport 22 -j MARK --set-mark 4
iptables -t mangle -A FORWARD -i enp0s3 -p tcp --dport 22 -j MARK --set-mark 4
iptables -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark 4
iptables -t mangle -A POSTROUTING -p tcp --dport 22 -j MARK --set-mark 4
#Activer le routage
echo 1 > /proc/sys/net/ipv4/ip_forward
J'ai mis tous les états car je ne savais pas lesquels sont nécessaire.
Ce que je n'avais pas pensé c'est que ssh ressort par un autre port aléatoire qui change à chaque tentative de connexion, donc il ne s'applique pas à la règle... mais les paquets en 22 partent bien vers le lien ADSL
Dernière modification par nicolas84 (Le 10/04/2019, à 16:50)
SERVER : Ubuntu Server 18.04 64bit - Intel Core i3-3220 - 12GB RAM
DESKTOP : Windows 10 - Intel Core Quad Q9550 - 8GB RAM
Hors ligne