Jump to content

Troubleshooting:Port Forwarding Troubleshooting: Difference between revisions

From jb-vpn.uk Wiki
Added troubleshooting guide: Port Forwarding Troubleshooting Guide (troubleshooting)
 
Content added - troubleshooting guide: Port Forwarding Troubleshooting Guide (32 sections) (troubleshooting)
Line 6: Line 6:


'''Port Forwarding Configuration:'''
'''Port Forwarding Configuration:'''
'' '''External Access''': <code>ssh -p 22222 user@87.106.61.62</code>
* '''External Access''': <code>ssh -p 22222 user@87.106.61.62</code>
'' '''Internal Target''': <code>10.8.0.2:22</code> (Synology NAS via VPN)
 
'' '''Network Interface''': <code>ens6</code> (external interface)
* '''Internal Target''': <code>10.8.0.2:22</code> (Synology NAS via VPN)
'' '''VPN Interface''': <code>tun0</code> (OpenVPN tunnel)
 
'' '''Cloud Provider''': IONOS
* '''Network Interface''': <code>ens6</code> (external interface)
 
* '''VPN Interface''': <code>tun0</code> (OpenVPN tunnel)
 
* '''Cloud Provider''': IONOS


----
----
Line 23: Line 27:


= '''Log in to IONOS Cloud Panel:''' =
= '''Log in to IONOS Cloud Panel:''' =
   '' Navigate to: https://dcd.ionos.com/
   * Navigate to: https://dcd.ionos.com/
   '' Select your Data Center → Server & Cloud → Servers
 
   * Select your Data Center → Server & Cloud → Servers


= '''Configure Firewall Rules:''' =
= '''Configure Firewall Rules:''' =
   '' Select your VPS server
   * Select your VPS server
   '' Go to '''Firewall''' section
 
   '' Click '''Add Rule''' or edit existing rules
   * Go to '''Firewall''' section
 
   * Click '''Add Rule''' or edit existing rules


= '''Add Firewall Rule for Port 22222:''' =
= '''Add Firewall Rule for Port 22222:''' =
   '' '''Name''': SSH Port Forward (or any descriptive name)
   * '''Name''': SSH Port Forward (or any descriptive name)
   '' '''Protocol''': TCP
 
   '' '''Port''': 22222
   * '''Protocol''': TCP
   '' '''Source''': 0.0.0.0/0 (or restrict to specific IPs for security)
 
   '' '''Action''': Allow
   * '''Port''': 22222
   '' '''Priority''': Set appropriate priority (lower numbers = higher priority)
 
   * '''Source''': 0.0.0.0/0 (or restrict to specific IPs for security)
 
   * '''Action''': Allow
 
   * '''Priority''': Set appropriate priority (lower numbers = higher priority)


= '''Apply Changes:''' =
= '''Apply Changes:''' =
   '' Save the firewall rule
   * Save the firewall rule
   '' Changes are applied immediately (no server restart required)
 
   * Changes are applied immediately (no server restart required)


= '''Verify IONOS Firewall:''' =
= '''Verify IONOS Firewall:''' =
   '' Ensure the firewall rule is active and enabled
   * Ensure the firewall rule is active and enabled
   '' Check that no higher-priority DROP rules are blocking the port
 
   '' Verify the rule applies to the correct network interface
   * Check that no higher-priority DROP rules are blocking the port
 
   * Verify the rule applies to the correct network interface


=== IONOS-Specific Notes ===
=== IONOS-Specific Notes ===


'' '''Firewall Location''': IONOS firewall is managed at the cloud infrastructure level, not on the VPS
* '''Firewall Location''': IONOS firewall is managed at the cloud infrastructure level, not on the VPS
'' '''No Security Groups''': IONOS uses a direct firewall per server, not security groups
 
'' '''Rule Priority''': Lower priority numbers are evaluated first
* '''No Security Groups''': IONOS uses a direct firewall per server, not security groups
'' '''Immediate Effect''': Firewall changes take effect immediately without server restart
 
'' '''Multiple Rules''': You can have multiple rules; ensure no conflicting DROP rules have higher priority
* '''Rule Priority''': Lower priority numbers are evaluated first
 
* '''Immediate Effect''': Firewall changes take effect immediately without server restart
 
* '''Multiple Rules''': You can have multiple rules; ensure no conflicting DROP rules have higher priority


=== Testing IONOS Firewall ===
=== Testing IONOS Firewall ===
Line 61: Line 80:


= '''Check IONOS Cloud Panel:''' =
= '''Check IONOS Cloud Panel:''' =
   '' Verify the firewall rule exists and is enabled
   * Verify the firewall rule exists and is enabled
   '' Check rule priority (lower numbers = higher priority)
 
   '' Ensure no DROP rules are blocking the port
   * Check rule priority (lower numbers = higher priority)
 
   * Ensure no DROP rules are blocking the port


= '''Test from different locations:''' =
= '''Test from different locations:''' =
Line 116: Line 137:
iptables -t nat -A PREROUTING -i ens6 -p tcp --dport 22222 -j DNAT --to-destination 10.8.0.2:22
iptables -t nat -A PREROUTING -i ens6 -p tcp --dport 22222 -j DNAT --to-destination 10.8.0.2:22
</pre>
</pre>
'' '''Purpose''': Redirects incoming traffic on port 22222 to the Synology NAS
* '''Purpose''': Redirects incoming traffic on port 22222 to the Synology NAS
'' '''Interface''': <code>ens6</code> (external/public interface)
 
'' '''Direction''': Incoming → Forwarded
* '''Interface''': <code>ens6</code> (external/public interface)
 
* '''Direction''': Incoming → Forwarded


'''MASQUERADE Rule (POSTROUTING):'''
'''MASQUERADE Rule (POSTROUTING):'''
Line 124: Line 147:
iptables -t nat -A POSTROUTING -d 10.8.0.2/32 -o tun0 -p tcp --dport 22 -j MASQUERADE
iptables -t nat -A POSTROUTING -d 10.8.0.2/32 -o tun0 -p tcp --dport 22 -j MASQUERADE
</pre>
</pre>
'' '''Purpose''': Handles source NAT for forwarded traffic so return packets route correctly
* '''Purpose''': Handles source NAT for forwarded traffic so return packets route correctly
'' '''Interface''': <code>tun0</code> (VPN tunnel)
 
'' '''Direction''': Outgoing forwarded traffic
* '''Interface''': <code>tun0</code> (VPN tunnel)
 
* '''Direction''': Outgoing forwarded traffic


=== 2. iptables Filter Rules (Firewall) ===
=== 2. iptables Filter Rules (Firewall) ===
Line 134: Line 159:
iptables -t filter -A FORWARD -d 10.8.0.2/32 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A FORWARD -d 10.8.0.2/32 -p tcp --dport 22 -j ACCEPT
</pre>
</pre>
'' '''Purpose''': Allows forwarding packets to the Synology SSH port
* '''Purpose''': Allows forwarding packets to the Synology SSH port
'' '''Direction''': Forwarded traffic
 
* '''Direction''': Forwarded traffic


=== 3. Persistence Configuration ===
=== 3. Persistence Configuration ===


'''Files:'''
'''Files:'''
'' <code>/etc/iptables/rules.v4</code> - Saved iptables rules
* <code>/etc/iptables/rules.v4</code> - Saved iptables rules
'' <code>/etc/openvpn/server/server.conf</code> - OpenVPN configuration
 
'' <code>/etc/openvpn/iptables-restore.sh</code> - Script that restores rules when VPN starts
* <code>/etc/openvpn/server/server.conf</code> - OpenVPN configuration
'' <code>/etc/sysctl.conf</code> - Contains <code>net.ipv4.ip_forward=1</code>
 
* <code>/etc/openvpn/iptables-restore.sh</code> - Script that restores rules when VPN starts
 
* <code>/etc/sysctl.conf</code> - Contains <code>net.ipv4.ip_forward=1</code>


'''Services:'''
'''Services:'''
'' <code>netfilter-persistent</code> - Loads iptables rules on boot
* <code>netfilter-persistent</code> - Loads iptables rules on boot
'' <code>openvpn-server@server.service</code> - OpenVPN server service
 
* <code>openvpn-server@server.service</code> - OpenVPN server service


----
----
Line 156: Line 186:


'''Symptoms:'''
'''Symptoms:'''
'' <code>ssh -p 22222 user@87.106.61.62</code> times out
* <code>ssh -p 22222 user@87.106.61.62</code> times out
'' No response from the server
 
* No response from the server


'''Diagnostic Steps:'''
'''Diagnostic Steps:'''
Line 173: Line 204:


= '''Check IONOS cloud firewall:''' =
= '''Check IONOS cloud firewall:''' =
   '' '''IONOS Cloud Panel''': Log in to https://dcd.ionos.com/
   * '''IONOS Cloud Panel''': Log in to https://dcd.ionos.com/
   '' Navigate to: Server & Cloud → Servers → [Your VPS] → Firewall
 
   '' Verify TCP port 22222 has an '''ALLOW''' rule configured
   * Navigate to: Server & Cloud → Servers → [Your VPS] → Firewall
   '' Check rule priority (lower numbers = higher priority)
 
   '' Ensure no DROP rules with higher priority are blocking the port
   * Verify TCP port 22222 has an '''ALLOW''' rule configured
   '' '''This is the most common cause of timeouts on IONOS'''
 
   '' See "IONOS Cloud Provider Configuration" section above for detailed steps
   * Check rule priority (lower numbers = higher priority)
 
   * Ensure no DROP rules with higher priority are blocking the port
 
   * '''This is the most common cause of timeouts on IONOS'''
 
   * See "IONOS Cloud Provider Configuration" section above for detailed steps


= '''Verify VPN is running:''' =
= '''Verify VPN is running:''' =
Line 194: Line 231:


'''Solution:'''
'''Solution:'''
'' If no logs appear: '''Check IONOS firewall in Cloud Panel''' (most common issue)
* If no logs appear: '''Check IONOS firewall in Cloud Panel''' (most common issue)
   '' Verify port 22222 is allowed in IONOS firewall rules
 
   '' Check rule priority and ensure no blocking rules override it
   * Verify port 22222 is allowed in IONOS firewall rules
'' If logs appear but connection fails: Check Synology VPN connection
 
'' If Synology is not in ipp.txt: Reconnect Synology to VPN
   * Check rule priority and ensure no blocking rules override it
 
* If logs appear but connection fails: Check Synology VPN connection
 
* If Synology is not in ipp.txt: Reconnect Synology to VPN


----
----
Line 205: Line 246:


'''Symptoms:'''
'''Symptoms:'''
'' Port forwarding works initially
* Port forwarding works initially
'' After reboot, connections time out
 
* After reboot, connections time out


'''Diagnostic Steps:'''
'''Diagnostic Steps:'''
Line 214: Line 256:
   iptables -t nat -L PREROUTING -n -v | grep 22222
   iptables -t nat -L PREROUTING -n -v | grep 22222
</pre>
</pre>
   '' If rule is missing, rules weren't loaded
   * If rule is missing, rules weren't loaded


= '''Verify persistence services are enabled:''' =
= '''Verify persistence services are enabled:''' =
Line 226: Line 268:
   grep "script-security\|up" /etc/openvpn/server/server.conf
   grep "script-security\|up" /etc/openvpn/server/server.conf
</pre>
</pre>
   '' Should show: <code>script-security 2</code> and <code>up /etc/openvpn/iptables-restore.sh</code>
   * Should show: <code>script-security 2</code> and <code>up /etc/openvpn/iptables-restore.sh</code>


= '''Verify iptables-restore script exists:''' =
= '''Verify iptables-restore script exists:''' =
Line 252: Line 294:


'''Symptoms:'''
'''Symptoms:'''
'' Rules exist but forwarding doesn't work
* Rules exist but forwarding doesn't work
'' Interface name mismatch
 
* Interface name mismatch


'''Diagnostic Steps:'''
'''Diagnostic Steps:'''
Line 292: Line 335:


'''Symptoms:'''
'''Symptoms:'''
'' Port 22222 is being used by SSH
* Port 22222 is being used by SSH
'' Connection connects but to wrong server
 
* Connection connects but to wrong server


'''Diagnostic Steps:'''
'''Diagnostic Steps:'''
Line 324: Line 368:


'''Symptoms:'''
'''Symptoms:'''
'' OpenVPN service fails to start
* OpenVPN service fails to start
'' Error messages about script-security
 
* Error messages about script-security


'''Diagnostic Steps:'''
'''Diagnostic Steps:'''
Line 354: Line 399:


'''Symptoms:'''
'''Symptoms:'''
'' Rules exist but forwarding doesn't work
* Rules exist but forwarding doesn't work
'' Can't reach Synology even though VPN is up
 
* Can't reach Synology even though VPN is up


'''Diagnostic Steps:'''
'''Diagnostic Steps:'''
Line 459: Line 505:
=== <code>/etc/iptables/rules.v4</code> ===
=== <code>/etc/iptables/rules.v4</code> ===
Complete iptables rules including:
Complete iptables rules including:
'' DNAT rule for port 22222
* DNAT rule for port 22222
'' FORWARD rule for Synology
 
'' MASQUERADE rule for return traffic
* FORWARD rule for Synology
'' Logging rules for debugging
 
* MASQUERADE rule for return traffic
 
* Logging rules for debugging


=== <code>/etc/openvpn/server/server.conf</code> ===
=== <code>/etc/openvpn/server/server.conf</code> ===
OpenVPN server configuration with:
OpenVPN server configuration with:
'' <code>script-security 2</code> - Allows up/down scripts
* <code>script-security 2</code> - Allows up/down scripts
'' <code>up /etc/openvpn/iptables-restore.sh</code> - Restores rules when VPN starts
 
* <code>up /etc/openvpn/iptables-restore.sh</code> - Restores rules when VPN starts


=== <code>/etc/openvpn/iptables-restore.sh</code> ===
=== <code>/etc/openvpn/iptables-restore.sh</code> ===
Line 538: Line 588:
= Check OpenVPN logs: <code>journalctl -u openvpn-server@server.service -n 100</code> =
= Check OpenVPN logs: <code>journalctl -u openvpn-server@server.service -n 100</code> =
= '''Verify IONOS firewall settings''' (most common issue): =
= '''Verify IONOS firewall settings''' (most common issue): =
   '' Log in to IONOS Cloud Panel: https://dcd.ionos.com/
   * Log in to IONOS Cloud Panel: https://dcd.ionos.com/
   '' Navigate to Server & Cloud → Servers → [Your VPS] → Firewall
 
   '' Verify port 22222 is allowed with proper priority
   * Navigate to Server & Cloud → Servers → [Your VPS] → Firewall
 
   * Verify port 22222 is allowed with proper priority
 
= Check IONOS support documentation or contact IONOS support if firewall is correctly configured =
= Check IONOS support documentation or contact IONOS support if firewall is correctly configured =


[[Category:Documentation]]
[[Category:Documentation]]
[[Category:Documentation/Troubleshooting]]
[[Category:Documentation/Troubleshooting]]

Revision as of 13:28, 1 January 2026

Port Forwarding Troubleshooting Guide

Overview

This guide covers troubleshooting for SSH port forwarding from the VPS (port 22222) to the Synology NAS (10.8.0.2:22) via OpenVPN.

Port Forwarding Configuration:

  • External Access: ssh -p 22222 user@87.106.61.62
  • Internal Target: 10.8.0.2:22 (Synology NAS via VPN)
  • Network Interface: ens6 (external interface)
  • VPN Interface: tun0 (OpenVPN tunnel)
  • Cloud Provider: IONOS

IONOS Cloud Provider Configuration

Important: This VPS is running on IONOS. The IONOS firewall must be configured to allow traffic on port 22222.

IONOS Firewall Configuration

IONOS uses a cloud firewall that must be configured through the IONOS Cloud Panel:

Log in to IONOS Cloud Panel:

  * Navigate to: https://dcd.ionos.com/
  * Select your Data Center → Server & Cloud → Servers

Configure Firewall Rules:

  * Select your VPS server
  * Go to Firewall section
  * Click Add Rule or edit existing rules

Add Firewall Rule for Port 22222:

  * Name: SSH Port Forward (or any descriptive name)
  * Protocol: TCP
  * Port: 22222
  * Source: 0.0.0.0/0 (or restrict to specific IPs for security)
  * Action: Allow
  * Priority: Set appropriate priority (lower numbers = higher priority)

Apply Changes:

  * Save the firewall rule
  * Changes are applied immediately (no server restart required)

Verify IONOS Firewall:

  * Ensure the firewall rule is active and enabled
  * Check that no higher-priority DROP rules are blocking the port
  * Verify the rule applies to the correct network interface

IONOS-Specific Notes

  • Firewall Location: IONOS firewall is managed at the cloud infrastructure level, not on the VPS
  • No Security Groups: IONOS uses a direct firewall per server, not security groups
  • Rule Priority: Lower priority numbers are evaluated first
  • Immediate Effect: Firewall changes take effect immediately without server restart
  • Multiple Rules: You can have multiple rules; ensure no conflicting DROP rules have higher priority

Testing IONOS Firewall

If you suspect the IONOS firewall is blocking traffic:

Check IONOS Cloud Panel:

  * Verify the firewall rule exists and is enabled
  * Check rule priority (lower numbers = higher priority)
  * Ensure no DROP rules are blocking the port

Test from different locations:

   # Test from external IP (not from the VPS itself)
   ssh -v -p 22222 user@87.106.61.62

Check if packets reach the VPS:

   # On the VPS, check if packets are hitting iptables rules
   iptables -t nat -L PREROUTING -n -v | grep 22222
   # If packet count doesn't increase, packets are blocked before reaching VPS

Quick Verification Checklist

Run these commands to verify the setup is working:

= 1. Check if VPN is running =
systemctl status openvpn-server@server.service

= 2. Verify VPN tunnel is up =
ip addr show tun0

= 3. Check if Synology is connected to VPN =
ping -c 2 10.8.0.2
cat /etc/openvpn/server/ipp.txt | grep "10.8.0.2"

= 4. Verify iptables rules are active =
iptables -t nat -L PREROUTING -n -v | grep 22222
iptables -t filter -L FORWARD -n -v | grep "10.8.0.2"

= 5. Check IP forwarding is enabled =
cat /proc/sys/net/ipv4/ip_forward  # Should output: 1

= 6. Verify SSH is NOT listening on port 22222 (should only be on 22) =
ss -tlnp | grep 22222  # Should return nothing

Components Explained

1. iptables NAT Rules (Port Forwarding)

DNAT Rule (PREROUTING):

iptables -t nat -A PREROUTING -i ens6 -p tcp --dport 22222 -j DNAT --to-destination 10.8.0.2:22
  • Purpose: Redirects incoming traffic on port 22222 to the Synology NAS
  • Interface: ens6 (external/public interface)
  • Direction: Incoming → Forwarded

MASQUERADE Rule (POSTROUTING):

iptables -t nat -A POSTROUTING -d 10.8.0.2/32 -o tun0 -p tcp --dport 22 -j MASQUERADE
  • Purpose: Handles source NAT for forwarded traffic so return packets route correctly
  • Interface: tun0 (VPN tunnel)
  • Direction: Outgoing forwarded traffic

2. iptables Filter Rules (Firewall)

FORWARD Rule:

iptables -t filter -A FORWARD -d 10.8.0.2/32 -p tcp --dport 22 -j ACCEPT
  • Purpose: Allows forwarding packets to the Synology SSH port
  • Direction: Forwarded traffic

3. Persistence Configuration

Files:

  • /etc/iptables/rules.v4 - Saved iptables rules
  • /etc/openvpn/server/server.conf - OpenVPN configuration
  • /etc/openvpn/iptables-restore.sh - Script that restores rules when VPN starts
  • /etc/sysctl.conf - Contains net.ipv4.ip_forward=1

Services:

  • netfilter-persistent - Loads iptables rules on boot
  • openvpn-server@server.service - OpenVPN server service

Common Issues and Solutions

Issue 1: Connection Timeout from External

Symptoms:

  • ssh -p 22222 user@87.106.61.62 times out
  • No response from the server

Diagnostic Steps:

Check if packets are reaching the VPS:

   # Watch kernel logs for DNAT rule hits
   # Note: On systems using journald, kern.log may not exist. Use dmesg instead.
   tail -f /var/log/kern.log | grep "DNAT-22222" 2>/dev/null || \
   dmesg -w | grep "DNAT-22222"
   
   # Or check recent logs
   dmesg | tail -30 | grep "DNAT-22222"

Check IONOS cloud firewall:

  * IONOS Cloud Panel: Log in to https://dcd.ionos.com/
  * Navigate to: Server & Cloud → Servers → [Your VPS] → Firewall
  * Verify TCP port 22222 has an ALLOW rule configured
  * Check rule priority (lower numbers = higher priority)
  * Ensure no DROP rules with higher priority are blocking the port
  * This is the most common cause of timeouts on IONOS
  * See "IONOS Cloud Provider Configuration" section above for detailed steps

Verify VPN is running:

   systemctl status openvpn-server@server.service
   ip link show tun0

Check if Synology is connected:

   ping -c 2 10.8.0.2
   cat /etc/openvpn/server/ipp.txt

Solution:

  • If no logs appear: Check IONOS firewall in Cloud Panel (most common issue)
 * Verify port 22222 is allowed in IONOS firewall rules
 * Check rule priority and ensure no blocking rules override it
  • If logs appear but connection fails: Check Synology VPN connection
  • If Synology is not in ipp.txt: Reconnect Synology to VPN

Issue 2: Port Forwarding Not Working After Reboot

Symptoms:

  • Port forwarding works initially
  • After reboot, connections time out

Diagnostic Steps:

Check if iptables rules are loaded:

   iptables -t nat -L PREROUTING -n -v | grep 22222
  * If rule is missing, rules weren't loaded

Verify persistence services are enabled:

   systemctl is-enabled netfilter-persistent
   systemctl is-enabled openvpn-server@server.service

Check OpenVPN configuration:

   grep "script-security\|up" /etc/openvpn/server/server.conf
  * Should show: script-security 2 and up /etc/openvpn/iptables-restore.sh

Verify iptables-restore script exists:

   ls -la /etc/openvpn/iptables-restore.sh
   cat /etc/openvpn/iptables-restore.sh

Solution:

= Manually restore rules =
iptables-restore < /etc/iptables/rules.v4

= Verify rules are saved correctly =
iptables-save > /etc/iptables/rules.v4

= Ensure services are enabled =
systemctl enable netfilter-persistent
systemctl enable openvpn-server@server.service

Issue 3: Wrong Network Interface

Symptoms:

  • Rules exist but forwarding doesn't work
  • Interface name mismatch

Diagnostic Steps:

Identify the correct external interface:

   ip route | grep default
   # Output: default via 87.106.61.1 dev ens6 ...

Check iptables rule interface:

   iptables -t nat -L PREROUTING -n -v | grep 22222
   # Should show: -i ens6 (or your actual interface)

Check saved rules file:

   grep "22222" /etc/iptables/rules.v4

Solution:

= Fix the interface in the rules file =
sed -i 's/-i eth0/-i ens6/g' /etc/iptables/rules.v4

= Or manually edit /etc/iptables/rules.v4 =
= Change: -A PREROUTING -i eth0 ... =
= To:     -A PREROUTING -i ens6 ... =

= Reload rules =
iptables-restore < /etc/iptables/rules.v4

Issue 4: SSH Conflicts with Port Forwarding

Symptoms:

  • Port 22222 is being used by SSH
  • Connection connects but to wrong server

Diagnostic Steps:

Check what's listening on port 22222:

   ss -tlnp | grep 22222

Check SSH configuration:

   grep "^Port" /etc/ssh/sshd_config

Solution:

= Remove port 22222 from SSH config =
sed -i '/^Port 22222$/d' /etc/ssh/sshd_config

= Restart SSH =
systemctl restart sshd

= Verify port 22222 is free =
ss -tlnp | grep 22222  # Should return nothing

Issue 5: VPN Not Starting

Symptoms:

  • OpenVPN service fails to start
  • Error messages about script-security

Diagnostic Steps:

Check OpenVPN status:

   systemctl status openvpn-server@server.service
   journalctl -u openvpn-server@server.service -n 50

Common error:

   WARNING: External program may not be called unless '--script-security 2' or higher is enabled

Solution:

= Add script-security to OpenVPN config =
echo "script-security 2" >> /etc/openvpn/server/server.conf

= Restart OpenVPN =
systemctl restart openvpn-server@server.service

Issue 6: IP Forwarding Disabled

Symptoms:

  • Rules exist but forwarding doesn't work
  • Can't reach Synology even though VPN is up

Diagnostic Steps:

Check if forwarding is enabled:

   cat /proc/sys/net/ipv4/ip_forward
   # Should output: 1

Check if it's in sysctl.conf:

   grep "ip_forward" /etc/sysctl.conf

Solution:

= Enable forwarding =
echo 1 > /proc/sys/net/ipv4/ip_forward

= Make it persistent =
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

Diagnostic Commands

Check Complete Forwarding Chain

echo "=== Port Forwarding Status ===" && \
echo "" && \
echo "1. DNAT Rule:" && \
iptables -t nat -L PREROUTING -n -v | grep 22222 && \
echo "" && \
echo "2. FORWARD Rules:" && \
iptables -t filter -L FORWARD -n -v | grep "10.8.0.2" && \
echo "" && \
echo "3. POSTROUTING (MASQUERADE):" && \
iptables -t nat -L POSTROUTING -n -v | grep "10.8.0.2\|MASQUERADE" && \
echo "" && \
echo "4. VPN Status:" && \
ip addr show tun0 2>/dev/null | grep "inet " && \
echo "" && \
echo "5. Synology Reachability:" && \
ping -c 1 -W 2 10.8.0.2 2>&1 | grep -E "bytes from|time=" || echo "Not reachable"

Monitor Connection Attempts

= Watch for incoming connections =
= Note: On systems using journald, kern.log may not exist. Use dmesg instead. =
tail -f /var/log/kern.log | grep -E "DNAT-22222|FWD-to-Synology" 2>/dev/null || \
dmesg -w | grep -E "DNAT-22222|FWD-to-Synology"

= Or use tcpdump =
tcpdump -i ens6 -n tcp port 22222

= Monitor iptables counters =
watch -n 1 'iptables -t nat -L PREROUTING -n -v | grep 22222'

Test Connection from VPS

= Test direct connection to Synology =
ssh -o ConnectTimeout=5 -p 22 user@10.8.0.2 "echo 'Direct connection works'"

= Test if port forwarding rule is active (from external IP) =
timeout 5 nc -zv 87.106.61.62 22222

Restore Configuration After Issues

If port forwarding stops working, restore the complete configuration:

= 1. Restore iptables rules =
iptables-restore < /etc/iptables/rules.v4

= 2. Verify rules are loaded =
iptables -t nat -L PREROUTING -n -v | grep 22222

= 3. Restart OpenVPN (will also restore rules via up script) =
systemctl restart openvpn-server@server.service

= 4. Verify VPN is up =
ip addr show tun0

= 5. Check Synology connection =
ping -c 2 10.8.0.2

Configuration Files Reference

/etc/iptables/rules.v4

Complete iptables rules including:

  • DNAT rule for port 22222
  • FORWARD rule for Synology
  • MASQUERADE rule for return traffic
  • Logging rules for debugging

/etc/openvpn/server/server.conf

OpenVPN server configuration with:

  • script-security 2 - Allows up/down scripts
  • up /etc/openvpn/iptables-restore.sh - Restores rules when VPN starts

/etc/openvpn/iptables-restore.sh

Script that restores iptables rules when OpenVPN tunnel comes up.

/etc/sysctl.conf

Contains net.ipv4.ip_forward=1 to enable IP forwarding.


Maintenance

Update Rules

After making changes to iptables rules:

= Save current rules =
iptables-save > /etc/iptables/rules.v4

= Verify they're correct =
cat /etc/iptables/rules.v4 | grep 22222

Add More Port Forwards

To forward additional ports:

= Add DNAT rule =
iptables -t nat -A PREROUTING -i ens6 -p tcp --dport <EXTERNAL_PORT> \
  -j DNAT --to-destination 10.8.0.2:<INTERNAL_PORT>

= Add FORWARD rule =
iptables -t filter -A FORWARD -d 10.8.0.2 -p tcp --dport <INTERNAL_PORT> -j ACCEPT

= Save rules =
iptables-save > /etc/iptables/rules.v4

Quick Reference

Component Value
External Port 22222
Internal Target 10.8.0.2:22
External Interface ens6
VPN Interface tun0
VPN Subnet 10.8.0.0/24
VPS Public IP 87.106.61.62
Synology VPN IP 10.8.0.2
Cloud Provider IONOS
IONOS Panel https://dcd.ionos.com/

Contact & Support

If issues persist after following this guide:

Check all diagnostic commands above

Review kernel logs: dmesg | tail -50

Check OpenVPN logs: journalctl -u openvpn-server@server.service -n 100

Verify IONOS firewall settings (most common issue):

  * Log in to IONOS Cloud Panel: https://dcd.ionos.com/
  * Navigate to Server & Cloud → Servers → [Your VPS] → Firewall
  * Verify port 22222 is allowed with proper priority

Check IONOS support documentation or contact IONOS support if firewall is correctly configured