Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/04/2019, à 18: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, à 08: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, à 08: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, à 09: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.

Hors ligne

#5 Le 09/04/2019, à 09: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, à 11: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, à 13: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…

Hors ligne

#8 Le 09/04/2019, à 14: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, à 15: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, à 15: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, à 09:45)

Hors ligne

#10 Le 10/04/2019, à 09: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, à 10: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 wink
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

Hors ligne

#12 Le 10/04/2019, à 11: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, à 12: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 hmm

Hors ligne

#14 Le 10/04/2019, à 16: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, à 17:50)


SERVER : Ubuntu Server 18.04 64bit - Intel Core i3-3220 - 12GB RAM
DESKTOP : Windows 10 - Intel Core Quad Q9550 - 8GB RAM

Hors ligne