OpenVPN preko WebSocketa
Imam vprašanje glede iptables.
Problem je naslednji: uporabljam OpenVPN povezavo preko WebSocketov.
Setup je naslednji:
Na strežniku (Debian 9):
1. Zaženem OpenVPN serversudo systemctl start openvpn@MyVPN_WS.service
OpenVPN strežnik je skonfiguriran tako, da posluša na TCP/8081 portu. Ta port je sicer za firewallom in ni dostopen od zunaj.
2. Zaženem Chisel (https://github.com/jpillora/chisel)
chisel server --port 8080 --auth me:mypasswd --socks5 &
Chisel vzpostavi websocket povezavo preko katere potem tečejo TCP paketki. Zadeva se zažene in posluša na portu 8080:
[1] 30289
root@vpn:/etc/openvpn# 2017/10/26 22:00:14 server: SOCKS5 Enabled
2017/10/26 22:00:14 server: Fingerprint b8:ad:8e:15:60:8f:f7:e0:f6:e8:ce:56:e4:85:d3:c5
2017/10/26 22:00:14 server: User authenication enabled
2017/10/26 22:00:14 server: Listening on 8080...
Na odjemalcu (Ubuntu 17.04) pa zaženem:
1. Najprej zaženem Chisel v client načinu:
chisel client --auth me:mypasswd http://myvpnserver.com:8080 socks
Zadeva se zažene in vzpostavi povezavo preko WebSocketa do strežnika:
2017/10/26 22:01:48 client: Connecting to ws://myvpnserver.com:8080
2017/10/26 22:01:48 client: tunnel#1 127.0.0.1:1080=>socks: Listening
2017/10/26 22:01:58 client: Retrying in 100ms...
2017/10/26 22:02:09 client: Retrying in 200ms...
2017/10/26 22:02:19 client: Fingerprint b8:ad:8e:15:60:8f:f7:e0:f6:e8:ce:56:e4:85:d3:c5
2017/10/26 22:02:19 client: Connected (Latency 37.582275ms)
Zdaj načeloma lahko preko WebSocket povezave (preko SOCKS5) dostopam neposredno do oddaljenega strežnika, tudi do portov, ki so od zunaj za firewallom. Na tej točki mi omrežje dela še povsem normalno.
2. Nato zaženem OpenVPN odjemalca:
openvpn --config MyVPN.conf
Config datoteka odjemalca vsebuje dva ključna parametra:
remote XX.XX.XX.XXX 8081
socks-proxy 127.0.0.1 1080
Ta dva parametra pomenita:
- OpenVPN se povezuje preko SOCKS proxya
- OpenVPN se poveže na server na port 8081
Zdaj pa problem.
OpenVPN se uspešno poveže. Ifconfig mi pokaže da imam tun0 napravo z ustreznim IP naslovom (10.10.6.2). Tako na server kot na client strani je iz logov razvidno, da je povezava uspešna.
Vendar pa ne morem pingat serverja (na 10.10.6.1). Pravzaprav ne morem pingat nobenega IP naslova. IP forwarding tudi ne deluje, čeprav je na serverju omogočen, skratka, omrežje ne dela.
Mislim pa, da vem v čem je problem.Verjetno je problem v tem, da mi OpenVPN nastavi default routo oziroma default gateway na 10.10.6.1. Iz tega razloga potem tudi "prestavi" WebSocket povezavo preko tega default gatewaya. Zato verjetno vse skupaj crkne. Je pa zanimivo - edina stvar ki deluje, je OpenVPN povezava.
Skratka, moral bi narediti nekako tako, da websocket povezava teče mimo default gatewaya, oziroma, da mi OpenVPN nastavi default gateway za vse ostale povezave, razen za WebSocket.
Kako to narediti z iptables?
Komentarji
To je kar se OpenVPN tiče.