如何更改 TCP/IP 数据包的默认 TTL?

如何更改 TCP/IP 数据包的默认 TTL?

我需要更改从我的 Ubuntu 计算机发送的 TCP/IP 数据包的默认 TTL。我找到了适用于 Windows 的解决方案:

  1. 制作 reg 文件:

    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\servic es\Tcpip\Parameters]
    "DefaultTTL"=dword:00000081
    
  2. 要在控制台中执行此命令:

    netsh int ipv4 set glob defaultcurhoplimit=129
    netsh int ipv6 set glob defaultcurhoplimit=129
    

问题是我应该如何将该解决方案翻译为适用于 Ubuntu 的解决方案?

答案1

更改默认设置生存时间从 Linux 计算机发送的 TCP/IP 数据包,您可以运行以下命令:

sudo sysctl -w net.ipv4.ip_default_ttl=129

或者:

echo 129 | sudo tee /proc/sys/net/ipv4/ip_default_ttl

或者:

sudo bash -c 'echo 129 > /proc/sys/net/ipv4/ip_default_ttl'

但是,每次计算机启动时,您都必须运行其中一个命令。要使此设置在重新启动后保持不变,您可以将以下行附加到文件/etc/sysctl.conf

net.ipv4.ip_default_ttl=129

如果您也想更改 ipv6 的设置,则应该使用ipv6而不是执行相同操作。ipv4

答案2

对于 IPv6

此处的另一个答案说:“您应该对 ipv6 执行相同操作”,但这不起作用。IPv6 使用net.ipv6.conf.all.hop_limitnet.ipv6.conf.default.hop_limit。但是,这些值会被特定于接口的名称(例如 )覆盖net.ipv6.conf.eth0.hop_limit。要更改它们,请使用:

for N in $(sudo sysctl --all 2>/dev/null |grep -Eo "^net\.ipv6\.conf\.[^\.]+\.hop_limit"); do
    sudo sysctl --write "$N=128"
done

其中128是所需的新值。

使 IPv4 永久生效(重启后生效)IPv6:

sudo sysctl --all 2>/dev/null |grep -E -e "^net\.ipv6\.conf\.[^\.]+\.hop_limit" -e "net.ipv4.ip_default_ttl" |sudo tee /etc/sysctl.d/11-custom-ttl-hop.conf

相关内容