我有一个基于 Stretch 的桌面,禁用了 IPv6,两者都作为内核中的参数。
我安装了软件包中的 ssh 客户端openssh-client
,版本 1:7.6p1-2.0nosystemd1。
在调试 DNS 解析问题时,我确实注意到 ssh 客户端仍在执行 IPv6 DNS 相关查询,如包含的tcpdump
日志所示。
我的问题是,如何禁用这种行为?
附言。我不是在问这是一个好主意还是坏主意,只是问如何在已经禁用所有 IPv6 服务的系统中做到这一点。
tcpdump
执行命令时记录ssh server1 ; ssh server2
。
# tcpdump -n port 53
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlan0, link-type EN10MB (Ethernet), capture size 262144 bytes
02:53:37.479073 IP 192.168.1.5.58296 > 192.168.1.1.53: 61011+ A? server1.home. (30)
02:53:37.479100 IP 192.168.1.5.58296 > 192.168.1.1.53: 4719+ AAAA? server1.home. (30)
02:53:37.487504 IP 192.168.1.1.53 > 192.168.1.5.58296: 61011 NXDomain* 0/1/0 (69)
02:53:37.493279 IP 192.168.1.1.53 > 192.168.1.5.58296: 4719 NXDomain* 0/1/0 (69)
02:53:37.493428 IP 192.168.1.5.60276 > 192.168.1.1.53: 31390+ A? server1. (25)
02:53:37.493455 IP 192.168.1.5.60276 > 192.168.1.1.53: 50392+ AAAA? server1. (25)
02:53:37.527879 IP 192.168.1.1.53 > 192.168.1.5.60276: 31390 NXDomain 0/1/0 (100)
02:53:37.535417 IP 192.168.1.1.53 > 192.168.1.5.60276: 50392 NXDomain 0/1/0 (100)
02:53:38.447390 IP 192.168.1.5.36155 > 192.168.1.1.53: 39363+ A? server1.home. (30)
02:53:38.447412 IP 192.168.1.5.36155 > 192.168.1.1.53: 4430+ AAAA? server1.home. (30)
02:53:38.455743 IP 192.168.1.1.53 > 192.168.1.5.36155: 39363 NXDomain* 0/1/0 (69)
02:53:38.461492 IP 192.168.1.1.53 > 192.168.1.5.36155: 4430 NXDomain* 0/1/0 (69)
02:53:38.461606 IP 192.168.1.5.39311 > 192.168.1.1.53: 45400+ A? server1. (25)
02:53:38.461631 IP 192.168.1.5.39311 > 192.168.1.1.53: 872+ AAAA? server1. (25)
02:53:38.493714 IP 192.168.1.1.53 > 192.168.1.5.39311: 45400 NXDomain 0/1/0 (100)
02:53:38.500353 IP 192.168.1.1.53 > 192.168.1.5.39311: 872 NXDomain 0/1/0 (100)
证明 IPv6 在内核/grub 中被禁用:
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-4.10.5-antix.3-amd64-smp root=UUID=00c17984-859f-4197-8bd8-b346ddd092bd ro iommu=1 intel_iommu=on iommu=pt ip6.disable=1 intremap=no_x2apic_optout radeon.pcie_gen2=0
还有sysctl
:
$ cat /etc/sysctl.conf | grep ipv6
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
还/etc/gai.conf
更改为优先考虑 IPv4。
答案1
要在客户端中禁用 IPv6 名称查询ssh
,您可以:
ssh
在命令行中调用,并可-4
选择仅在 IPv4 中进行操作和查询;然后将别名定义为:
alias ssh=`ssh -4`
如果您拥有计算机的系统管理员,您还可以在ssh
客户端系统范围的配置文件编辑中禁用 IPv6 功能/DNS 查询/etc/ssh/ssh_config
并添加以下配置参数:
AddressFamily inet
从man ssh_config
:
地址族
指定连接时使用哪个地址族。有效参数为“any”、“inet”(仅使用 IPv4)或“inet6”(仅使用 IPv6)。