在一个终端中,我跑了
$ nc -l -6 ::1 5000
在另一个终端,我跑了
$ cat /proc/net/tcp6
并看到了这一行:
0: 00000000000000000000000001000000:1388 00000000000000000000000000000000:0000 ...
为什么说我在听::1:0:0:0
而不是在听::1
?
我对 IPv6 世界很陌生。
我正在尝试fc00::a6:32:67:c9:23
从同一网络上的另一台主机 ping 地址,但到目前为止它不起作用(尽管我能够使用 Link-Local 单播地址 ping 设备)。
我的本地主机(ping 的来源)上的网络配置如下所示:
host1$ ip addr
2: wlp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 10:4a:7d:cd:e6:73 brd ff:ff:ff:ff:ff:ff
inet 192.168.55.61/24 brd 192.168.55.255 scope global dynamic noprefixroute wlp6s0
valid_lft 348sec preferred_lft 348sec
inet6 fe80::68b0:2809:2bab:2e8b/64 scope link noprefixroute
valid_lft forever preferred_lft forever
5: enx000ec6a6aea4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0e:c6:a6:ae:a4 brd ff:ff:ff:ff:ff:ff
inet 192.168.55.198/24 metric 1024 brd 192.168.55.255 scope global dynamic enx000ec6a6aea4
valid_lft 599sec preferred_lft 599sec
inet6 fc00::e:c6a6:aea4/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::2576:c20e:e91d:7677/64 scope link noprefixroute
valid_lft forever preferred_lft forever
本地路由表如下所示:
$ ip -6 route
::1 dev lo proto kernel metric 256 pref medium
2001:db8:100:1ff:ff:ff:ff:ff dev enx000ec6a6aea4 proto static metric 1024 pref medium
fc00::/64 dev enx000ec6a6aea4 proto kernel metric 256 pref medium
fe80::/64 dev wlp6s0 proto kernel metric 1024 pref medium
fe80::/64 dev enx000ec6a6aea4 proto kernel metric 1024 pref medium
default via 2001:db8:100:1ff:ff:ff:ff:ff dev enx000ec6a6aea4 proto static metric 1024 pref medium
目标主机上的界面如下所示:
host2$ ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether dc:a6:32:67:c9:23 brd ff:ff:ff:ff:ff:ff
inet 192.168.55.187/24 brd 192.168.55.255 scope global dynamic noprefixroute eth0
valid_lft 599sec preferred_lft 524sec
inet6 fc00::a6:32:67:c9:23/64 scope global tentative noprefixroute
valid_lft forever preferred_lft forever
inet6 2001::a6:32:67:c9:23/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::a790:54e2:224b:f14/64 scope link
valid_lft forever preferred_lft forever
我想知道为什么目标主机上我的 -prefixed IP 地址tentative
旁边有一个?fc00
有人知道吗?这是我的ping问题的原因吗?
我debian 8
在我的服务器上运行。最近,服务器开始只对所有传出 TCP 连接使用 IPv6。但是,它仍然接受 IPv4 的传入连接。
因此,我现在无法访问任何网站(端口 80),建立任何 ssh 连接(端口 22),也无法通过服务器上的任何 TCP 端口访问任何其他传出主机。
iptables -F
我通过后跟完全禁用了所有 iptables 规则iptables -X
,问题仍然存在。
以下是一些可能相关的命令输出:
% sudo ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether aa:bf:5c:77:b2:82 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether f2:3c:91:96:da:28 brd ff:ff:ff:ff:ff:ff
inet 45.33.123.70/24 brd 45.33.123.255 scope global eth0
valid_lft forever preferred_lft forever
inet 45.33.5.47/24 scope global eth0:1
valid_lft forever preferred_lft forever
inet 192.168.135.4/17 scope global eth0:2
valid_lft forever preferred_lft forever
inet6 2600:3c00::f03c:91ff:fe96:da28/64 scope global mngtmpaddr dynamic
valid_lft 87sec preferred_lft 27sec
inet6 fe80::f03c:91ff:fe96:da28/64 scope link
valid_lft forever preferred_lft forever
4: teql0: <NOARP> mtu 1500 qdisc noop state DOWN group default qlen 100
link/void
5: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
6: gre0@NONE: <NOARP> mtu 1476 qdisc noop state DOWN group default qlen 1000
link/gre 0.0.0.0 brd 0.0.0.0
7: gretap0@NONE: <BROADCAST,MULTICAST> mtu 1476 qdisc noop state DOWN group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
8: erspan0@NONE: <BROADCAST,MULTICAST> mtu 1464 qdisc noop state DOWN group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
9: ip_vti0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
10: ip6_vti0@NONE: <NOARP> mtu 1364 qdisc noop state DOWN group default qlen 1000
link/tunnel6 :: brd ::
11: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/sit 0.0.0.0 brd 0.0.0.0
12: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1000
link/tunnel6 :: brd ::
13: ip6gre0@NONE: <NOARP> mtu 1448 qdisc noop state DOWN group default qlen 1000
link/gre6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
% sudo route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 45.33.123.1 0.0.0.0 UG 0 0 0 eth0
45.33.5.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
45.33.123.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.128.0 0.0.0.0 255.255.128.0 U 0 0 0 eth0
我不知道是什么导致了这种对仅 IPv6 输出的更改。但无论如何,我只想回到 IPv4 作为所有传出连接的默认值。
感谢您的任何见解和建议。
我有 3 个 Linux 虚拟机像这样连接:
/ server1 \
| ens19 2001:1::2 |
\ /
|
/ \
| ens19 2001:1::1 |
| server2 |
| ens20 2001:2::1 |
\ /
|
/ \
| ens19 2001:2::2 |
\ server3 /
我在 server1 上运行这些命令:
ip link set dev ens19 up
ip -6 address add 2001:1::2/96 dev ens19
ip -6 route add default via 2001:1::1
然后这些在server3上:
ip link set dev ens19 up
ip -6 address add 2001:2::2/96 dev ens19
ip -6 route add default via 2001:2::1
然后这些在server2上:
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
ip link set dev ens19 up
ip link set dev ens20 up
ip -6 address add 2001:1::1/96 dev ens19
ip -6 address add 2001:2::1/96 dev ens20
如果我尝试从 server1 ping server3,它可以工作:
root@server1:~# ping6 2001:2::2
但是如果我将 server2 上的接口移动到网络命名空间内:
ip netns add net1
ip link set dev ens19 netns net1
ip link set dev ens20 netns net1
ip netns exec net1 ip link set dev ens19 up
ip netns exec net1 ip link set dev ens20 up
ip netns exec net1 ip -6 address add 2001:1::1/96 dev ens19
ip netns exec net1 ip -6 address add 2001:2::1/96 dev ens20
从 server1 到 server3 的 ping 不再有效。不再转发数据包。
为什么?(注意:IPv4 的工作流程相同)
我使用以下命令(和输出)收到了 IPv6 地址:
$ dig +short +answer aaaa deb.debian.org
debian.map.fastlydns.net.
2a04:4e42:65::644
现在,当我尝试运行以下命令时:
wget -6 https://2a04:4e42:65::644
我收到以下错误:
https://2a04:4e42:65::644: Bad port number.
我的 wget 版本信息:
GNU Wget 1.21 built on linux-gnu.
这个版本的 wget (debian 11) 与 IPv6 不兼容吗?
我有一个运行 Debian 10 的 VPS,例如,我有以下 /64 子网:
2001:db8:abcd:abcd::/64
如何使用该子网中的单个 IP?例如,如果我想将此单个 IPv6 用于进程:2001:db8:abcd:abcd::1234/128
,我必须添加到 /etc/network/interfaces 以使其工作?默认情况下,它不响应 ping,它只是超时。非常感谢!
在 Fedora 服务器上,我的/etc/sysconfig/network-scripts/ifcfg-eth0:0
:
IPV6ADDR=<REDACTED>:48ea::1/64
现在绑定到该特定地址有效:
$ nc -l <REDACTED>:48ea::1 1025
但是,绑定到同一网络掩码空间中的另一个地址失败:
$ nc -l <REDACTED>:48ea::2 1025
Ncat: bind to <REDACTED>:48ea::2:1025: Cannot assign requested address. QUITTING.
如果显式添加<REDACTED>:48ea::2/128
(通过添加IPV6ADDR_SECONDARIES
或运行ip addr add <REDACTED>:48ea::2/128 dev eth0
),那么我可以绑定到它。
为什么添加/64
地址还不够?在使用设备之前,我是否必须明确地将每个 /128 地址添加到设备中?
我目前正忙于用我放置在周围的一台旧的无风扇、无头 Intel Atom/ITX 计算机构建一个互联网网关。这些是我的要求:
<prefix>::1/64
在面向局域网的接口上设置 IPv6 ip我想使用有状态 DHCPv6 而不是无状态 DHCP 或 SLAAC,因为我将设置由我的新网关管理的 DDNS 以及半径和其他一些可能性...其中一些将用于确定 ip 客户端结束跟上。
我目前的一切都在 ipv4 方面工作。有规律的。网关本身具有与 Internet 的功能齐全的双栈连接,并且可以通过 ipv4 和 ipv6 访问资源。我还为 ipv4 和 ipv6 实现了基于 netfilter 的防火墙。我什至为局域网分配了一个静态私有 ipv4 地址和一个<prefix>::1/64
地址。我可以通过 DHCP 为我的局域网上的客户端提供 ipv4 地址、dns、域、网关和所有其他内容。ifplugd 提供了对断开连接和重新连接的恢复能力。
我不能做的是通过 DHCP 向客户端提供范围内的有状态IPv6 地址。<prefix>::0/64
我坚持 dhcpd 需要我在其配置文件中设置静态名称服务器、静态网关和静态前缀的现实……但所有这些都是根据我的 ISP 给出的前缀动态分配的。我现在已经多次浏览 dhcpd.conf 手册页,但我没有看到任何提供动态分配这些的方法。dhcpcd 以二进制格式存储它的租约数据并没有帮助。我找到了一种可行的方法来查询 dhcpcd 的租约数据,所以这不再是问题了。
我的下一步是编写我已经编写了一些脚本/systemd 单元来管理从 dhcpcd 查询我需要的数据并(重新)使用适当的标志启动 dhcpd(将很快添加为答案)。但这很笨拙,我担心它可能会以即插即用单元的所有方式出现问题。如果稍后我必须通过 ssh 进入我的网关来修复某些问题……这意味着我失败了。
fd41:2a0d:e8e4:0::1
是作为子网的路由器选项发送的条目,26AA:A4A4:300:22AF::/64
如果所有客户端都具有该子网和fd41:2a0d:e8e4:0::/64
子网的 ips?我已经读过,由于我的问题,使用服务器的本地链接 IP 优于全局可路由 IP……但是在子网之外设置网关 IP 的想法似乎是错误的。PS在有人问之前,我开始尝试在 wan 端使用 dhclient(坚持使用 dns/dhcp 的 ISC 工具),但它不想在同一个接口上解析 ipv6 和 ipv4,也不让我查询v6 ip 和 v6 前缀。可能是我的错……但结果我放弃了,转而使用 dhcpcd。
radvd.conf:
interface lan {
AdvManagedFlag on;
AdvSendAdvert on;
#AdvAutonomous off;
AdvOtherConfigFlag on;
IgnoreIfMissing on;
AdvDefaultPreference high;
MaxRtrAdvInterval 60;
};
dhcpcd.conf:
hostname
duid
persistent
option rapid_commit
option classless_static_routes
option interface_mtu
require dhcp_server_identifier
noipv6rs
waitip 6
waitip 4
denyinterfaces lan
interface wan
ipv4
ipv6
dhcp
dhcp6
ipv6rs
ia_na 1
#ia_pd 2 lan
ia_pd 2/::/64 lan/0/64
有了getent hosts localhost
,我才得到::1
,虽然我期待127.0.0.1
。我禁用了 IPv6,所以得到::1
更令人惊讶。更令人困惑的是,当 I 时ping localhost
,ping 被发送到127.0.0.1
哪个有效。有人可以解释一下吗?
~: getent hosts localhost
::1 localhost
~: grep 'hosts:' /etc/nsswitch.conf
hosts: files mymachines myhostname resolve [!UNAVAIL=return] dns
~: cat /etc/sysctl.d/disable_ipv6.conf
net.ipv6.conf.all.disable_ipv6=1
~: ping ::1
connect: Network is unreachable
~: ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.022 ms
~: ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.015 ms
编辑:localhost
我的/etc/hosts
.
所以我正在测试一个路由器,它向我网络上的所有机器添加了一些随机 IPv6 地址,包括我的 DNS 服务器。不知何故,这些 IP 作为有效的 DNS 服务器被广播(不确定只有真正的路由器如何发送 IPv6 RA 数据包),但长话短说,现在我所有的机器都在向不存在的 IP 地址发送 DNS 查询。
如果我重新启动resolved
,systemctl restart systemd-resolved
那么resolvectl
仍然会将这些虚假 IP 显示为有效的名称服务器。
它们已列在其中,/etc/resolv.conf
因此如果我将它们删除并重新启动systemd-resolved
,它只会重新添加虚假 IP。
如果我查看日志,journalctl --unit=systemd-resolved
它会告诉我虚假 IP 正在“降级功能模式”下运行,但没有告诉我从哪里找到这些 IP。
它从哪里获取这些错误的 IP 地址?是否需要删除一些缓存文件以使其恢复为仅使用 IPv6 路由器广告提供的 IP?