
Er zijn meerdere manieren om een lokale poort via internet bereikbaar te maken. Deze methoden werken achter normale NAT-routers, maar ook achter Carrier Grade NAT (CGNAT). CGNAT wordt vaak gebruikt bij LTE/4G-internetverbindingen.
Methoden in dit artikel:
In de voorbeelden forwarden we lokale poort 8080 naar internetpoort 18080.
Voor SSH port tunneling moet GatewayPorts op yes staan:
$ sshd -T|grep -i gatewayports
gatewayports yes
Staat daar no, pas dan /etc/ssh/sshd_config aan:
$ vi /etc/ssh/sshd_config
GatewayPorts yes
Herstart SSH:
$ systemctl restart ssh
Daarna kun je vanaf de lokale machine een reverse tunnel starten:
$ ssh -l root -R :18080:localhost:8080 my-vps.com
Als je geen eigen VPS wilt gebruiken, kan Serveo handig zijn. Je hoeft niets te installeren en hebt geen account nodig:
$ ssh -R 18080:localhost:8080 serveo.net
Hi there
Forwarding TCP connections from serveo.net:18080
Download ngrok via het dashboard, pak het zipbestand uit en authenticatieer de client:
$ unzip /path/to/ngrok.zip
$ ./ngrok authtoken 3e5iY2KftJ2844aWA6jDY_9fJFZAc1Hhq5bJ4eD1myV
Start daarna de tunnel:
$ ./ngrok http 8080
ngrok toont vervolgens een publieke URL die naar je lokale poort 8080 verwijst.
Bij een OpenVPN-oplossing verbind je de lokale machine met je VPS en forward je daarna via die VPN-verbinding.
Op Linux moet IP forwarding aan staan:
$ echo 1 > /proc/sys/net/ipv4/ip_forward
$ vi /etc/sysctl.conf
net.ipv4.ip_forward=1
Voeg in server.conf onder andere toe:
client-to-client
keepalive 15 60
ping-timer-rem
ifconfig-pool-persist /etc/openvpn/ipp
sysctl -w net.ipv4.ip_forward=1
Herstart OpenVPN:
$ service openvpn start
Voordeel van deze methode is dat je het Let’s Encrypt certificaat van je webserver kunt gebruiken. Intern in je lokale netwerk is HTTP vaak voldoende.
<IfModule mod_ssl.c>
Listen 18080
<VirtualHost *:18080>
ProxyPreserveHost On
ProxyRequests Off
ServerName myserver.com
SSLProxyEngine On
ProxyPass "/" "http://192.168.1.5:8080/"
ProxyPassReverse "/" "http://192.168.1.5:8080/"
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/myserver.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/myserver.com/privkey.pem
</VirtualHost>
</IfModule>
Activeer de configuratie:
$ cd /etc/apache2/sites-enabled/
$ ln -s ../sites-available/application_example.conf
$ systemctl restart apache2.service
In dit voorbeeld heeft de lokale machine IP 192.168.1.5:
$ vi /etc/rc.local
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 18080 -j DNAT --to-destination 192.168.1.5:8080
iptables -t nat -A POSTROUTING -d 192.168.1.5/32 -p tcp -m tcp --dport 8080 -j MASQUERADE