Passer le trafic de Dante Server dans OpenVPN Le sujet est résolu

Demande d'aide : c'est ici.
Répondre
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 5054
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

Salut,

J'essaye de faire passer le trafic de mon serveur Socks5 Dante dans un tunnel OpenVPN.
En vain...

Le client OpenVPN est up and running

Code : Tout sélectionner

...
2023-05-27 10:30:27 TUN/TAP device tun0 opened
2023-05-27 10:30:27 net_iface_mtu_set: mtu 1500 for tun0
2023-05-27 10:30:27 net_iface_up: set tun0 up
2023-05-27 10:30:27 net_addr_v4_add: 10.7.0.128/16 dev tun0
2023-05-27 10:30:27 Initialization Sequence Completed
2023-05-27 10:30:27 Data Channel: cipher 'AES-256-GCM', peer-id: 0, compression: 'stub'
2023-05-27 10:30:27 Timers: ping 60, ping-restart 180

Code : Tout sélectionner

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether e0:d5:5e:cc:5e:b5 brd ff:ff:ff:ff:ff:ff
    inet 10.1.1.8/24 brd 10.1.1.255 scope global dynamic enp2s0
       valid_lft 5389sec preferred_lft 5389sec
    inet6 fe80::e2d5:5eff:fecc:5eb5/64 scope link 
       valid_lft forever preferred_lft forever
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none 
    inet 10.7.0.128/16 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::274:c381:d07e:f611/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever
J'accède bien au serveur OpenVPN de l'autre côté:

Code : Tout sélectionner

# ping 10.7.0.1
PING 10.7.0.1 (10.7.0.1) 56(84) bytes of data.
64 bytes from 10.7.0.1: icmp_seq=1 ttl=64 time=215 ms
64 bytes from 10.7.0.1: icmp_seq=2 ttl=64 time=215 ms
...
Le Serveur Dante est bien UP & Running...

Code : Tout sélectionner

# systemctl status danted.service
● danted.service - SOCKS (v4 and v5) proxy daemon (danted)
     Loaded: loaded (/lib/systemd/system/danted.service; enabled; preset: enabled)
     Active: active (running) since Sat 2023-05-27 09:08:07 EAT; 1h 28min ago
       Docs: man:danted(8)
             man:danted.conf(5)
    Process: 1931 ExecStartPre=/bin/sh -c       uid=`sed -n -e "s/[[:space:]]//g" -e "s/#.*//" -e "/^user\.privileged/{s/[^:]*://p;q;}" /etc/danted.conf`;      if [ -n "$uid" ]; then                  touch /var/run/danted.pid;              chown $uid /var/run/danted.pid;         fi       (code=exited, status=0/SUCCESS)
   Main PID: 1935 (danted)
...
La configuration de Dante-server:

Code : Tout sélectionner

# cat /etc/danted.conf
logoutput: syslog
user.privileged: root
user.unprivileged: nobody

# The listening network interface or address.
internal: 127.0.0.1 port=1080

# The proxying network interface or address.
external: tun0

# socks-rules determine what is proxied through the external interface.
socksmethod: username

# client-rules determine who can connect to the internal interface.
clientmethod: none

client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
}

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
}

Et je suis bien autorisé à passer par la serveur Dante (Localement...)

Code : Tout sélectionner

# curl -v -x socks5://user:password@localhost:1080 http://localhost
*   Trying 127.0.0.1:1080...
* Connected to localhost (127.0.0.1) port 1080 (#0)
* SOCKS5 connect to IPv4 127.0.0.1:80 (locally resolved)
* SOCKS5 request granted.
* Connected to localhost (127.0.0.1) port 1080 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.88.1
> Accept: */*
...

Par contre impossible de sortir sur Internet...

Code : Tout sélectionner

# curl -v -x socks5://user:password@localhost:1080 http://144.76.60.126
*   Trying 127.0.0.1:1080...
* Connected to localhost (127.0.0.1) port 1080 (#0)
* SOCKS5 connect to IPv4 144.76.60.126:80 (locally resolved)
* Can't complete SOCKS5 connection to 144.76.60.126. (6)
* Closing connection 0
curl: (97) Can't complete SOCKS5 connection to 144.76.60.126. (6)

Et je ne comprend pas pourquoi...
Les logs de Dante ne me parlent pas...

Code : Tout sélectionner

023-05-27T10:59:13.089063+03:00 seedbox danted[4085]: debug: io_fillset_connectinprogress(): fd 12 marked as still connecting
2023-05-27T10:59:13.089337+03:00 seedbox danted[4085]: debug: io_fillset_connectinprogress(): fd 14 marked as still connecting
2023-05-27T10:59:13.089551+03:00 seedbox danted[4085]: debug: run_io(): first select; readable/connected?
2023-05-27T10:59:13.089820+03:00 seedbox danted[4085]: debug: io_gettimeout(): last_time = 9632, tnow = 9633, last_timeout_isset = 1, last_timeout = 1.000000
2023-05-27T10:59:13.090118+03:00 seedbox danted[4085]: debug: io_gettimeout(): timeout for iov #0 is in 5s
2023-05-27T10:59:13.090404+03:00 seedbox danted[4085]: debug: io_gettimeout(): timeout for iov #1 is in 24s
2023-05-27T10:59:13.090668+03:00 seedbox danted[4085]: debug: io_fillset_connectinprogress(): fd 12 marked as still connecting
2023-05-27T10:59:13.090950+03:00 seedbox danted[4085]: debug: io_fillset_connectinprogress(): fd 14 marked as still connecting
2023-05-27T10:59:13.091168+03:00 seedbox danted[4085]: debug: io_gettimeout(): last_time = 9633, tnow = 9633, last_timeout_isset = 1, last_timeout = 5.999999
2023-05-27T10:59:13.091516+03:00 seedbox danted[4085]: debug: run_io(): second select; what is writable?
2023-05-27T10:59:14.090538+03:00 seedbox danted[4085]: debug: io_fillset_connectinprogress(): fd 12 marked as still connecting
2023-05-27T10:59:14.090899+03:00 seedbox danted[4085]: debug: io_fillset_connectinprogress(): fd 14 marked as still connecting
2023-05-27T10:59:14.091157+03:00 seedbox danted[4085]: debug: run_io(): first select; readable/connected?
2023-05-27T10:59:14.091421+03:00 seedbox danted[4085]: debug: io_gettimeout(): last_time = 9633, tnow = 9634, last_timeout_isset = 1, last_timeout = 1.000000
2023-05-27T10:59:14.091785+03:00 seedbox danted[4085]: debug: io_gettimeout(): timeout for iov #0 is in 4s
2023-05-27T10:59:14.091991+03:00 seedbox danted[4085]: debug: io_gettimeout(): timeout for iov #1 is in 23s
2023-05-27T10:59:14.092283+03:00 seedbox danted[4085]: debug: io_fillset_connectinprogress(): fd 12 marked as still connecting
2023-05-27T10:59:14.092508+03:00 seedbox danted[4085]: debug: io_fillset_connectinprogress(): fd 14 marked as still connecting
2023-05-27T10:59:14.092956+03:00 seedbox danted[4085]: debug: io_gettimeout(): last_time = 9634, tnow = 9634, last_timeout_isset = 1, last_timeout = 4.999999
...
2023-05-27T10:59:38.119081+03:00 seedbox danted[4085]: info: pass(1): tcp/connect ]: 0 -> username%indexer@127.0.0.1.52624 127.0.0.1.1080 -> 0, 0 -> 10.7.0.128.52624 144.76.60.126.80 -> 0: connect timeout.  Session duration: 31s#012accept to negotiate start       : 0.000117s#012negotiate duration              : 0.012763s#012negotiate finish to established : N/A#012session establish to first i/o  : N/A#012total session duration          : 31.050941s
2023-05-27T10:59:38.119480+03:00 seedbox danted[4085]: debug: io_timeuntiltimeout(): timeouttype = 2, protocoltimeout = 30, tnow = 9658, lastio = 9627 (31s ago), timeout reached -1s ago
2023-05-27T10:59:38.119704+03:00 seedbox danted[4085]: info: pass(1): tcp/accept ]: 0 -> 127.0.0.1.52624 127.0.0.1.1080 -> 0: connect timeout.  Session duration: 31s#012accept to negotiate start       : 0.000117s#012negotiate duration              : 0.012763s#012negotiate finish to established : N/A#012session establish to first i/o  : N/A#012total session duration          : 31.050941s



Et il n'y a rien dans les logs de OpenVPN. C'est surement une piste... :003:
C'est comme si le serveuy OpenVPN refusait la connexion. Je n'ai pas la main sur le serveur, seulement sur le client.

Pour info le Tunnel est en TCP (Je crois que c'est indispensable pour que ça fonctionne). J'ai essayé avec UDP, mais ça ne change rien.

Si vous avez une idée je suis preneur. :006:
Merci.
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
PascalHambourg
Contributeur
Contributeur
Messages : 930
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

Tables et règles de routage ?

Code : Tout sélectionner

ip route ls table all
ip rule
Des règles de filtrage iptables ou nftables ?
As-tu fait une capture de trafic sur tun0 et enp2s0 ?
lol a écrit : 27 mai 2023, 10:08 le Tunnel est en TCP (Je crois que c'est indispensable pour que ça fonctionne)
Pour que quoi fonctionne ?
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 5054
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

Salut PascalHambourg,

Code : Tout sélectionner

# ip route ls table all
default via 10.1.1.254 dev enp2s0 
10.1.1.0/24 dev enp2s0 proto kernel scope link src 10.1.1.8 
10.7.3.0/24 dev tun0 proto kernel scope link src 10.7.3.3 
local 10.1.1.8 dev enp2s0 table local proto kernel scope host src 10.1.1.8 
broadcast 10.1.1.255 dev enp2s0 table local proto kernel scope link src 10.1.1.8 
local 10.7.3.3 dev tun0 table local proto kernel scope host src 10.7.3.3 
broadcast 10.7.3.255 dev tun0 table local proto kernel scope link src 10.7.3.3 
local 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1 
local 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1 
broadcast 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1 
::1 dev lo proto kernel metric 256 pref medium
fe80::/64 dev enp2s0 proto kernel metric 256 pref medium
fe80::/64 dev tun0 proto kernel metric 256 pref medium
local ::1 dev lo table local proto kernel metric 0 pref medium
local fe80::656b:f2f9:1185:df7b dev tun0 table local proto kernel metric 0 pref medium
local fe80::e2d5:5eff:fecc:5eb5 dev enp2s0 table local proto kernel metric 0 pref medium
multicast ff00::/8 dev enp2s0 table local proto kernel metric 256 pref medium
multicast ff00::/8 dev tun0 table local proto kernel metric 256 pref medium

Code : Tout sélectionner

# ip rule
0:	from all lookup local
32766:	from all lookup main
32767:	from all lookup default

PascalHambourg a écrit : 31 mai 2023, 14:14 Pour que quoi fonctionne ?
Pour que le VPN laisse passer le trafic venant de Dante ? :017:


Pour info, en activant le mode masquerade dans nftables via firewalld
# firewall-cmd --permanent --add-masquerade
success


J'obtiens une réponse.
Mais il semblerait que mon IP de sortie ne soit pas correctement detectée... J'ai donc un doute.

Code : Tout sélectionner

root@seedbox:~# curl -v -x socks5://10.1.1.8:1080 -U user:pass http://whatismyip.akamai.com/
*   Trying 10.1.1.8:1080...
* Connected to 10.1.1.8 (10.1.1.8) port 1080 (#0)
* SOCKS5 connect to IPv4 23.52.67.115:80 (locally resolved)
* SOCKS5 request granted.
* Connected to 10.1.1.8 (10.1.1.8) port 1080 (#0)
> GET / HTTP/1.1
> Host: whatismyip.akamai.com
> User-Agent: curl/7.88.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< Content-Type: text/html
< Content-Length: 14
< Expires: Wed, 31 May 2023 12:22:48 GMT
< Cache-Control: max-age=0, no-cache, no-store
< Pragma: no-cache
< Date: Wed, 31 May 2023 12:22:48 GMT
< Connection: keep-alive
< 
* Connection #0 to host 10.1.1.8 left intact
197.149.35.xxx
197.149.35.xxx est mon IP malgache et non française (Je suis connecté à un serveur OpenVPN en France).
Logiquement je devrais avoir l'IP du serveur OpenVPN, non ?
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
PascalHambourg
Contributeur
Contributeur
Messages : 930
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

lol a écrit : 31 mai 2023, 14:31

Code : Tout sélectionner

default via 10.1.1.254 dev enp2s0 
10.1.1.0/24 dev enp2s0 proto kernel scope link src 10.1.1.8 
10.7.3.0/24 dev tun0 proto kernel scope link src 10.7.3.3
Pas de routage avancé et la route par défaut passe par l'interface ethernet et seules les destinations 10.7.3.0/24 sont routées via le tunnel.
lol a écrit : 27 mai 2023, 10:08 # The proxying network interface or address.
external: tun0
Cette option ne force pas le routage par le tunnel (ce n'est pas possible) mais seulement l'adresse IP source des connexions sortantes.
Donc les paquets ont l'adresse source de tun0 et sont envoyés au routeur par défaut du LAN. Soit le routeur jette les paquets à cause de leur adresse source inconnue (donc considérée comme extérieure), soit il sera incapable de router les paquets de réponse. De toute façon ce n'est pas ce que tu veux.
lol a écrit : 31 mai 2023, 14:31 Pour info, en activant le mode masquerade dans nftables via firewalld
J'obtiens une réponse.
Normal. Masquerade remplace l'adresse IP source originelle (l'adresse de tun0) par l'adresse IP de l'interface de sortie (ethernet) et le routeur du LAN peut accepter les paquets et router les réponses. C'est donc comme si tu n'avais pas spécifié d'adresse/interface dans la configuration de dante.
lol a écrit : 31 mai 2023, 14:31 Mais il semblerait que mon IP de sortie ne soit pas correctement detectée... J'ai donc un doute.
Normal puisque ça sort par le routeur de ton LAN.

Tu dois faire en sorte que les connexions sortantes de dante soient routées via le tunnel. Soit en définissant le tunnel comme la route par défaut mais ce n'est peut-être pas ce que tu veux, soit en faisant du routage avancé. Le plus simple est de faire une règle de routage basée sur l''adresse IP source.

Code : Tout sélectionner

ip rule add from <adresse IP du tunnel> table 100
ip route add default dev <interface du tunnel> table 100
A créer lorsque le tunnel monte et à supprimer lorsque le tunnel tombe sauf si tu es sûr que l'interface et l'adresse sont toujours les mêmes.
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 5054
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

Bonjour,

C'est clair et évident, merci pour les explications. :good:
J'étais persuadé que Dante-server permettait de forcer l'interface de sortie. Stupide que je suis.
PascalHambourg a écrit : 31 mai 2023, 15:20...soit en faisant du routage avancé. Le plus simple est de faire une règle de routage basée sur l''adresse IP source.
C'est exactement ce que je souhaite.
D'ailleurs le VPN n'est pas l'interface de sortie par défaut de la machine, c'est fait exprès dans les options du client OpenVPN.

Code : Tout sélectionner

ip rule add from <adresse IP du tunnel> table 100
ip route add default dev <interface du tunnel> table 100
PascalHambourg a écrit : 31 mai 2023, 15:20 A créer lorsque le tunnel monte et à supprimer lorsque le tunnel tombe sauf si tu es sûr que l'interface et l'adresse sont toujours les mêmes.

Comment faire ça puisque l'IP du tunnel change à chaque nouvelle connexion ?
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
PascalHambourg
Contributeur
Contributeur
Messages : 930
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

openvpn n'a pas des options pour exécuter des scripts ou des commandes arbitraires lors de des montée et descente du tunnel ?
Sinon, tu peux mettre tout le préfixe du tunnel s'il est stable (10.7.0.0/16 ?).
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 5054
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

PascalHambourg a écrit : 31 mai 2023, 16:00 openvpn n'a pas des options pour exécuter des scripts ou des commandes arbitraires lors de des montée et descente du tunnel ?
Sinon, tu peux mettre tout le préfixe du tunnel s'il est stable (10.7.0.0/16 ?).

Oui, OpenVPN doit avoir ces options, mais j'ai peur que ce soit poussé par le serveur.
Je vais creuser ça.

En attendant mettre tout le prefixe est une excellent idée (Je peux même mettre plusieurs prefixes... :wink: )

En attendant, confirmation:

Code : Tout sélectionner

# ip rule add from 10.7.3.3 table 100
# ip route add default dev tun0 table 100

$ curl -k -x socks5://10.1.1.8:1080 -U user:pass https://whatismyip.akamai.com/
185.222.240.212
:yahoo:
Merci beaucoup!
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
Répondre