====== Networking - IP Forwarding ====== IP forwarding is also known as routing. If the Linux server is acting as a firewall, router, or NAT device, it will need to be capable of forwarding packets that are meant for other destinations (other than itself). * IP forwarding should usually be turned off if one of the aforementioned configurations is not being used. * This prevents wasting bandwidth or resources to forward packets elsewhere, if not needed. Linux uses the **net.ipv4.ip_forward** kernel variable to toggle this setting on or off. ---- ===== Check if IP forwarding is enabled or disabled, using sysctl ===== sysctl net.ipv4.ip_forward returns: net.ipv4.ip_forward = 0 **NOTE:** This shows the net.ipv4.ip_forward kernel setting is 0, which means it is off. * If it were set to 1, that would mean it is enabled. ---- ===== Alternatively, check if IP forwarding is enabled or disabled, using proc ===== cat /proc/sys/net/ipv4/ip_forward returns: 0 ---- ===== Enable or disable IP forwarding ===== ==== Using sysctl ==== sysctl -w net.ipv4.ip_forward=0 or sysctl -w net.ipv4.ip_forward=1 **WARNING:** This will not make the change persistent. ---- ==== Alternatively, using proc ==== Change the setting inside **/proc/sys/net/ipv4/ip_forward** to turn the setting on or off. echo 0 > /proc/sys/net/ipv4/ip_forward or echo 1 > /proc/sys/net/ipv4/ip_forward **WARNING:** This will not make the change persistent. ---- ==== Ensure persistency ==== To make sure the new setting survives a reboot, edit the **/etc/sysctl.conf** file. Add one of the following lines to the bottom of the file, depending on whether to have IP forwarding on or off. net.ipv4.ip_forward = 0 or net.ipv4.ip_forward = 1 Then, save your changes to this file. **NOTE:** The setting will be permanent across reboots. ---- ==== Make the changes take effect right away ==== sysctl -p ---- ===== Troubleshooting ===== Check the status of sysctl with this command: systemctl status sysctl ---- The service should say that it is active. If not, start the service with this command: sudo systemctl start sysctl On non-systemd Linux installs, checking the status of sysctl will be different. Try: rc-service sysctl status ---- If IP forwarding is successfully enabled (verified by checking the kernel variable after reboot), but traffic is still not being received on destination systems, check the FORWARD rules of iptables. iptables -L -v -n returns: ... Chain FORWARD (policy ACCEPT 667 packets, 16724 bytes) pkts bytes target prot opt in out source destination **NOTE:** The FORWARD chain should either be set to ACCEPT, or have rules listed that allow certain connections. * Check if traffic is reaching the FORWARD chain of iptables by checking the amount of packets and bytes that have hit the chain. * If none, then there may be some higher rules in the chain that are blocking traffic. ---- ===== TAGS ===== * TAG: Firewall * TAG: Networking * TAG: Router * TAG: Routing * TAG: Security * TAG: Server ----