Linux 启用 IP 转发 (IPv4 / IPv6)

IP 转发概述

默认情况下, 最新的 Linux 发行版通常会禁用 IP 转发功能。这种默认设置是合理的, 因为大多数用户并不需要启用 IP 转发功能。但是, 如果我们在设置一台 Linux 路由器/网关、VPN 服务器或简单的拨号服务器时, 就必须启用 IP 转发功能。

IP 转发使得 Linux 操作系统能够像路由器一样转发数据包, 或者更通用地说, 将数据包在不同的网络之间进行路由。在本教程中, 我们将学习如何在 Linux 系统上启用 IP 转发。这个过程相对简单, 同时我们也会了解如何将 IP 转发设置为临时启用或永久启用。

IP 转发是操作系统在一个接口上接受传入网络数据包的能力,识别该数据包不是发往系统本身,而是应该转发到另一个网络,然后再相应地继续传输。

默认情况下,任何最新的 Linux 发行版都会 禁用 IP 转发。因此,这是一个好主意,因为许多用户不需要 IP 转发,但是,如果我们要设置 Linux 路由器/网关 或 VPN 服务器 或只是一个简单的 拨入服务器 ,那么我们必须启用 转发。

IP 转发使操作系统(这里是 Linux)能够像路由器一样转发数据包,或者更普遍地说,通过其他网络路由它们。

在监听网络(Man in the middle attack in particular)时通常会激活 IP 转发,但在尝试使 Linux 机器成为多个网络之间的路由器时也会更简单。

临时启用

临时启用IP转发不需要修改配置文件, 但这种设置会在系统重启后失效。

查看当前状态

要查看当前 IP 转发的状态, 执行以下命令

1
2
3
4
5
6
7
8
9
10
11
# IPv4
cat /proc/sys/net/ipv4/ip_forward
# 查看IPv4的拥堵算法
sysctl net.ipv4.tcp_available_congestion_control

# IPv6
cat /proc/sys/net/ipv6/conf/all/forwarding
# 查看IPv6的拥堵算法
sysctl net.ipv6.conf.all.disable_ipv6
# 查看IPv6是否启用
sysctl net.ipv6.tcp_available_congestion_control

如果返回 0, 表示 IP 转发被禁用;如果返回 1, 表示 IP 转发已启用

临时启用 IP 转发

临时修改, 在重启或者使用 sysctl 时会恢复默认

1
2
3
4
5
# 启用 IPv4 转发
sysctl -w net.ipv4.ip_forward = 1

# 启用 IPv6 转发
sysctl -w net.ipv6.conf.all.forwarding = 1

永久启用

要永久启用 IP 转发, 需要修改系统配置文件 /etc/sysctl.conf

  1. 打开文件 /etc/sysctl.conf

    1
    vim /etc/sysctl.conf
  2. 在文件末尾添加以下内容

    1
    2
    net.ipv4.ip_forward = 1
    net.ipv6.conf.all.forwarding = 1
  3. 使配置立即生效

    1
    sysctl -p /etc/sysctl.conf