如何在Linux中禁用/启用IP转发

Linux如何检查当前的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

Linux如何启用或者禁用IP转发

我们可以使用以下sysctl命令在系统上启用或者禁用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

根据我们是否希望IP转发以关闭或者打开,将以下行之一添加到文件的底部。

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

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

# sysctl -p

故障排除

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

$systemctl status sysctl

服务应该说它是活跃的。
如果没有,请使用此命令启动服务:

$sudo systemctl start sysctl

在非系统Linux安装上,检查Sysctl的状态将不同。
例如,OpenRC使用此命令:

# rc-service sysctl status

如果我们已成功启用IP转发(通过重新启动后检查内核变量),但我们仍然没有接收目标系统上的流量,请检查iptables的前向规则。

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

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

日期:2020-07-07 20:56:37 来源:oir作者:oir