我进入此文件/etc/dhcp/dhclient.conf
并在请求行之前添加了以下两行:
default interface-mtu 1200;
supercede interface-mtu 1200;
在我重新启动并且系统启动后,我运行它ifconfig
并显示我的MTU
尺寸是 1280。为什么?我怎样才能将其更改为精确的 1200?
更新:
cat /etc/resolv.conf
:
lrwxrwxrwx 1 root root 29 Mar 19 13:05 /etc/resolv.conf -> ../run/resolvconf/resolv.conf
文件resolv.conf
:
nameserver 1.1.1.1
nameserver 8.8.8.8
nameserver 2606:4700:4700::1111
nameserver 127.0.0.53
options edns0
输出resolvectl
为:
Current DNS Server: 1.1.1.1
DNS Servers: 1.1.1.1
8.8.8.8
2606:4700:4700::1111
DNSSEC NTA: 10.in-addr.arpa
输出dpkg -l *dnsmasq*
为:
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-
aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture
Description
+++-======================-================-================-
==================================================
un dnsmasq <none> <none> (no
description available)
ii dnsmasq-base 2.79-1 amd64 Small
caching DNS proxy and DHCP/TFTP server
un dnsmasq-base-lua <none> <none> (no
description available)
答案1
要确定正确的 MTU 设置,请从所有 MTU 设置 = 1500 和 VPN = 关闭开始。(VPN 需要不同的测试)。
注意:首先删除您的模块/etc/dhcp/dhclient.conf
并重新启动。
在终端:
ping [-c count] [-M do] [-s packet_size] [host]
使用的选项是:
c count
:ping 次数M hint
:选择路径 MTU 发现策略。可以是do
(禁止碎片,即使是本地碎片),want
(进行 PMTU 发现,当数据包大小较大时在本地进行碎片),或dont
(不设置 DF 标志)。s packet_size
:指定要发送的数据字节数。
您应该始终从 1472 开始,然后每次减少 10。一旦收到回复,就增加 1,直到收到碎片数据包。取该值(最后一个好值)并将 28 添加到该值以考虑各种 TCP/IP 标头。例如,假设 1452 是合适的数据包大小(您第一次收到对 ping 的 ICMP 回复)。实际的 MTU 大小将是 1480,这是我们正在使用的网络的最佳值。
ping -c 4 -M do -s 1472 8.8.8.8 # this will probably show fragmentation
ping -c 4 -M do -s 1462 8.8.8.8 # may show fragmentation
ping -c 4 -M do -s 1452 8.8.8.8 # no fragmentation?
ping -c 4 -M do -s 1453 8.8.8.8 # still no fragmentation?
参考:如何使用 ICMP ping 确定适当的 MTU 大小
更新#1:
我建议您删除您添加的 3 个额外名称服务器,/etc/resolvconf/resolv.conf.d/head
并让 systemd-resolved 正确管理/etc/resolv.conf
。这应该可以更好地与 VPN 配合使用。
更新 #2:
您还可以设置不同的有线/无线连接配置文件,仅用于 VPN,将 MTU 硬连线为 1200。在 中terminal
,输入nm-connection-editor
,然后您可以使用以下方式自定义仅用于 VPN 的配置文件自动连接和最大传输单元。
答案2
您可以使用tracepath
(来自iputils-tracepath
包)来确定路径 MTU:
walt@bat:~(0)$ dpkg -S $(type -p tracepath)
iputils-tracepath: /usr/bin/tracepath
walt@bat:~(0)$ tracepath primus.ip4.torontointernetxchange.net
1?: [LOCALHOST] pmtu 1500
1: spark3y 0.525ms
1: spark3y 0.497ms
2: spark3y 0.465ms pmtu 1492
2: dsl-xxx-xxx-xxx-xxx.tor.primus.ca 32.701ms
3: 10.201.117.2 34.726ms asymm 5
4: bb1.tor.primus.ca 39.238ms
5: primus.ip4.torontointernetxchange.net 33.295ms reached
Resume: pmtu 1492 hops 5 back 4
答案3
您可以按照脚本中的建议,在 VPN 启动时自动设置 VPN 端口的 mtu
/etc/NetworkManager/dispatcher.d/01-ifupdown
。dispatcher.d
文件夹中的脚本以端口和事件作为参数进行调用。
因此,在文件夹中创建一个dispatcher.d
包含以下内容的脚本(如果您愿意mtu 1200
):
#!/bin/sh
#info : pre-up and pre-down are not implemented in network-manager
if [ "$2" = "vpn-up" ]; then
/sbin/ifconfig "$1" mtu 1200
fi
(脚本的名称并不重要。)然后使用 使其可执行chmod +x <script>
。
答案4
我知道这是一个老话题,但是为了以防其他人遇到这个问题(因为我在其他地方找不到答案)。
具体解决设置 MTU 的问题/etc/dhcp/dhclient.conf
;不解决这是否理想或如何检查适当的 MTU 值。仅解决设置值的机制。
OP 拼错了“supersede”语句。下面这行是正确的语法,已使用 isc-dhclient-4.4.1 进行了测试。注意:其他服务可能会对 MTU 应用自己的更改,但就 dhclient 而言,这会更改设置。
supersede interface-mtu 1200;