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前向链。如果没有,那么您的链中可能有一些更高的规则阻止流量。