Linux IP 转发 - 如何使用 net.ipv4.ip_forward 禁用/启用Linux IP 转发 - 如何使用 net.ipv4.ip_forward 禁用/启用Linux IP 转发 - 如何使用 net.ipv4.ip_forward 禁用/启用Linux IP 转发 - 如何使用 net.ipv4.ip_forward 禁用/启用
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

Linux IP 转发 - 如何使用 net.ipv4.ip_forward 禁用/启用

在某些场景下,可能需要在Linux系统上配置Linux IP转发。如果 Linux 服务器充当防火墙、路由器或 NAT 设备,则它需要能够转发发往其他目的地(除自身之外)的数据包。 Linux 使用 net.ipv4.ip_forward 内核变量来打开或关闭此设置。

相反,如果您不使用上述配置之一,通常应关闭 IP 转发。您通常不希望您的系统浪费带宽或资源来将数据包转发到其他地方,除非它是专为完成这项工作而设计的。

在本教程中,我们将通过命令行示例逐步说明如何启用或禁用 IP 转发。您可以将这些命令应用于任何主要的 Linux 发行版,包括 Ubuntu 和 Red Hat 等流行选择。您将了解如何编辑 net.ipv4.ip_forward 参数,该参数控制 IPv4 的 IP 转发是打开还是关闭。

在本教程中您将学习:

  • 如何查看当前IP转发状态

  • 如何启用或禁用 IP 转发

  • IP 转发的常见故障排除步骤

检查当前IP转发状态

视频

大多数系统都能够使用 sysctl 命令,该命令可以应用内核变量。因此,您可以使用以下sysctl命令来检查IP转发是否启用或禁用。

# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

在上面的示例中,net.ipv4.ip_forward 内核设置为 0。这意味着它已关闭。如果它设置为 1,则意味着它已启用。

还可以在具有 systemd 的系统或任何其他 init 系统上的 /proc/sys/net/ipv4/ip_forward 文件内查看此设置。

# cat /proc/sys/net/ipv4/ip_forward
0

你知道吗?
IP转发也称为路由。对于 Linux,它也可能称为内核 IP 转发,因为它使用内核变量 net.ipv4.ip_forward 来启用或禁用 IP 转发功能。默认预设值为ip_forward=0。因此,Linux IP 转发功能默认是禁用的。

启用或禁用 IP 转发

您可以使用以下 sysctl 命令在系统上启用或禁用 Linux IP 转发。

# sysctl -w net.ipv4.ip_forward=0
OR
# sysctl -w net.ipv4.ip_forward=1

您还可以更改 /proc/sys/net/ipv4/ip_forward 内的设置来打开或关闭该设置。

# echo 0 > /proc/sys/net/ipv4/ip_forward
OR
# echo 1 > /proc/sys/net/ipv4/ip_forward

使用上述任何一种方法都不会使更改持久。为了确保新设置在重新启动后仍然有效,您需要编辑 /etc/sysctl.conf 文件。

# sudo nano /etc/sysctl.conf

将以下行之一添加到文件底部,具体取决于您想要关闭还是打开 Linux IP 转发。然后,保存对此文件的更改。该设置在重新启动后将是永久的。 net.ipv4.ip_forward 设置控制是否为 IPv4 打开或关闭 IP 转发。

net.ipv4.ip_forward = 0
OR
net.ipv4.ip_forward = 1

编辑文件后,您可以运行以下命令以使更改立即生效。

# sysctl -p

故障排除

请注意,如果服务当前未运行,则使用 sysctl 命令。使用此命令检查 sysctl 的状态。

$ systemctl status sysctl

该服务应该表明它处于活动状态。如果没有,请使用以下命令启动服务:

$ sudo systemctl start sysctl

在非 systemd Linux 安装上,检查 sysctl 的状态会有所不同。例如,OpenRC 使用以下命令:

# rc-service sysctl status

如果您已成功启用 Linux IP 转发(通过重新启动后检查内核变量进行验证),但您仍然没有在目标系统上接收流量,请检查 iptables 的 FORWARD 规则。

# iptables -L -v -n
...       
Chain FORWARD (policy ACCEPT 667 packets, 16724 bytes)
 pkts bytes target     prot opt in     out     source               destination

您的 FORWARD 链应该设置为 ACCEPT,或者列出允许某些连接的规则。您可以通过检查已到达链的数据包和字节数来查看流量是否到达 iptables 的 FORWARD 链。如果没有,那么您的链中可能有一些更高的规则阻塞了流量。

结束语

在本教程中,我们了解了如何通过编辑内核变量在 Linux 系统中启用或禁用 IP 转发。这里的方法涵盖使用 systemd 或其他一些 init 系统的系统。我们还了解了如何使更改持久,以及常见的故障排除步骤,以防更改后 IP 转发仍然无法正常工作。

请记住,不打算转发网络流量的系统应始终关闭此设置。它可以防止它们被用来屏蔽流量,或浪费重要的带宽和资源来处理传入流量并将其转发到其他目的地。

©2015-2025 艾丽卡 support@alaica.com