Hiding openvpn traffic with stunnel so DPI firewalls are less likely to block your traffic.
As you see in the above diagram, trafic encapsulates as SSL/TLS by stunnel regradless of it's internal protocol. Since we need SSL/TLS handshake, if openvpn in the underlying protocol we need to use TCP protocol for openvpn.
You can find a simple tutorial for installing openvpn on a debian machine here.
Supposing you already have installed openvpn over TCP 1194 on your server, then you need to hide the trafiic via stunnel and this tutorials will guide you trough the rest of procedures.
This has two steps:
- Install and configure
stunnelon server. - Install and configure
stunnelon client.
In reality SSL/TLS traffic is short and intermittent so still it would be easy for a goverment/ISP to detect stunnel since lots of traffic will be passed as SSL/TLS. It is recommended to use port TCP 443 or TCP 587 to hide the traffic so far.
You can run the script stunnel.sh provided by this tutorial like:
sudo bash stunnel.shdownload stunnel.pem from your home directory after installation got completed.
Now step two is configuring client side.
You should have a client.ovpn config file or something similar for connecting to openvpn server.
Edit this file and add the following lins at the begining:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
route server_ip 255.255.255.255 net_gatewayReplace server_ip with your server public IP address.
sudo apt install stunnel4sudo cp ./stunnel.pem /etc/stunnelCreate /etc/stunnel/stunnel.conf file with the following content:
[openvpn]
client = yes
accept = 1194
connect = server_ip:443
cert = /etc/stunnel/stunnel.pemReplace server_ip with your server public IP address. Here we used port 443
To enable Stunnel service at startup edit /etc/default/stunnel4 file and change ENABLED=0 to ENABLED=1
sudo iptables -A INPUT -p tcp -s localhost --dport 1194 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 1194 -j DROPsudo service stunnel4 restartNow you just connect to openvpn via its' config file and it will automatically route traffic via stunnel. Your local stunnel will connect to remote stunnel on the server which routes received trsffic to oprnvpn service.
Example:
sudo openvpn --config client.ovpnEverything should work well by now.
You should have a client.ovpn config file or something similar for connecting to openvpn server.
Edit this file and add the following lins at the begining:
route server_ip 255.255.255.255 net_gatewayReplace server_ip with your server public IP address.
Download and install latest Windows stunnel client. Currently only 32-bit version is privoded and this is the latest release by the time of writing this tutorial.
By default config file is located at C:\Program Files (x86)\stunnel\config as stunnel.conf.txt. Edit the file and add the following content at the bottom of the file:
[openvpn]
client = yes
accept = 127.0.0.1:1194
connect = server_ip:443
cert = stunnel.pemReplace server_ip with your server public IP address. Here we used port 443. Restart stunnel application to reload the new configurations.
Make sure stunnel is running and connect your openvpn. Everything should work well by now.