可能的重复:
我可以将(大)地址块绑定到接口吗?
我有一个 /48 IPv6 块。我希望能够做到这一点:
$ wget --bind-address=<1st-ipv6> http://www.some-url.com
$ wget --bind-address=<2nd-ipv6> http://www.some-url.com
$ wget --bind-address=<3rd-ipv6> http://www.some-url.com
etc...
Run Code Online (Sandbox Code Playgroud)
对于我的 /48 块中的任何 2^80 个可用 IP。
根据我的测试,为接口分配大量 IP 会使速度变慢(就每秒 HTTP 请求而言)。显然,我无法将数十亿个 IP 分配给一个接口。有没有办法告诉Linux接受属于我的/48块的任何IP,或者修改wget以便可以完成?
2013 年 1 月 17 日编辑: 我找到了怎么做。您的内核版本必须至少为 3.3,因为从该版本开始,将应用此补丁:http ://lists.openwall.net/netdev/2011/11/08/8
然后你必须以 root 身份运行(正如 David Schwartz 所说):
# ip -6 route add local your_ipv6_block/48 dev lo
Run Code Online (Sandbox Code Playgroud)
您必须将此路由分配给 lo 接口,即使它不是到达 Internet 的传出接口。
然后你必须修改wget的源代码。在 src/connect.c 的 connect_to_ip() 函数中,创建套接字后,添加以下内容:
setsockopt(sock, SOL_IP, IP_FREEBIND, &v, sizeof(v));
Run Code Online (Sandbox Code Playgroud)
然后编译 wget (编译器可能会抱怨 IP_FREEBIND 没有被定义,如何解决这个问题超出了这里的范围)并安装它。
然后你就可以成功地做到:
$ wget …Run Code Online (Sandbox Code Playgroud) 配置 IPv6 LAN 时,可能需要使用路由器通告来宣布标准 1500 字节或更大的链路 MTU,以启用巨型帧(也许是 9000)。这将允许 LAN 上的主机之间的通信使用最大的框架可能。如果到 IPv6 互联网的默认路由必须经过6in4隧道类型,则在使用 PPPoE 时,MTU 通常为 1480 或 1472。
LAN 主机之间的通信应不间断,但沿默认路由的正常流量事件链的行为会有所不同。在大多数连接的握手期间,包含大量数据的第一个数据包几乎总是大于默认路由的 MTU,从而促使路由器丢弃该数据包并发送 ICMPv6 数据包太大消息(类型 2 )。我认为大多数操作系统都会通过目标地址缓存路径 MTU 发现的结果,因此几乎所有默认路由连接都会发生这种交互。此交换最多只需要几十毫秒,因此我预计它不会导致严重的性能问题。
问题是:这种类型的配置是否被视为最佳实践?是否首选使用等于(或小于)默认路由路径 MTU 的链路 MTU?有这方面的文档吗?
LAN WAN
hostA -----\ v4 WAN Link / 6in4 tunnel
\ MTU 9000 MTU 1500 MTU 1480
|---------- router ------------------------ - - -
/ IPv4 Internet, 6in4 endpoint -->
hostB -----/
<<< router adv
prefix
RDNSS
MTU 9000
etc
Example TCP connection:
TCP(SYN, 94 …Run Code Online (Sandbox Code Playgroud) 我知道如何进行 ipv4 转发,并且预计 ipv6 转发的工作方式几乎相同。因此,我使用 ISP 配置的网络地址配置了 VirtualBox 主机。现在,这是我拥有的网络:

(来源:hjts.nl)
我可以 ping 通 Debian 路由器上的所有 ipv6 地址,但无法访问 Debian 必须转发数据包的地址,例如从 Fedora 客户端到 Debian 上的 eth0。
Debian 服务器配置为允许 IPV6 转发:
root@6server:~# sysctl -p
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.accept_ra = 2
net.ipv6.conf.all.accept_redirects = 1
net.ipv6.conf.all.accept_source_route = 1
Run Code Online (Sandbox Code Playgroud)
iptables 也应该允许它..
root@6server:~# ip6tables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all anywhere …Run Code Online (Sandbox Code Playgroud) 前言:我在 Docker 和网络方面都是新手,尤其是 IPv6。我是软件开发人员,而不是系统/网络管理员。
我正在 Linode 上运行 Arch,并希望设置支持 IPv6 的 Docker。我可以使用 IPv4,虽然我还没有解决这个问题,但我仍然使用 IPv4,但我真的很期待启用 IPv6。
由于我正在使用systemd-networkd我必须启用IPForward=kernel我已经完成的操作。
如果 Docker 没有运行,显然 IPv6 适用于我的 Arch。
如果我在没有 IPv6 的情况下运行 Docker,Arch 将具有 IPv6 连接。
现在,如果我在启用 IPv6 的情况下运行 Docker:,docker daemon --ipv6 --fixed-cidr-v6="XXXXX/64" -H fd://它会破坏我的 Arch 的 IPv6 连接,并且它在容器内也不起作用。
我发现的一个区别是,如果没有适用于 Docker 的 IPv6,我的 Arch 上有一个 IPv6 的默认路由:
[root@x ~]# ip -6 route show
2a01:7e00::/64 dev enp0s4 proto kernel metric 256 pref medium
fe80::/64 dev enp0s4 proto kernel metric 256 pref medium
fe80::/64 …Run Code Online (Sandbox Code Playgroud) 这将是一篇很长的文章,但我想提供完整的信息。
我有一个家庭/企业 LAN,其中 isc-dhcp-server 运行 ipv4 dhcp 服务器,并绑定为在 ubuntu 服务器盒上运行的 DNS 服务器。我有comcast业务,网关禁用了所有dhcp功能。为了终止 ipv6,直到我准备好处理它,在我的所有 Linux 机器上,我使用 grub 命令和 sysctl 参数禁用了 ipv6:
surfrock66@sr66-hp2:~/.scripts$ cat /etc/default/grub | grep -v "#"
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet ipv6.disable=1 acpi_backlight=vendor"
GRUB_CMDLINE_LINUX=""
surfrock66@sr66-hp2:~/.scripts$ cat /etc/sysctl.conf | grep -v "#"
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
net.ipv6.conf.wlo0.disable_ipv6 = 1
surfrock66@sr66-hp2:~/.scripts$
Run Code Online (Sandbox Code Playgroud)
这些系统上没有 ipv6。因此,我认为这是一个不相关的说明,我的 Android 和 chromecast 设备出现了 wifi 问题。我看到的主要问题是连接速度过慢,这可能会导致超时和失败。好吧,我正在做一些故障排除并执行了 iperf...iperf 应用程序列出了 ipv6 地址和 ipv4 地址。果然,进一步查看...每个有缓慢问题的设备都有一个来自某个地方的 ipv6 地址! …
“首选生命周期”和“有效生命周期”租赁之间有什么区别?首选的意义是什么?为什么不直接使用有效的终身租赁?谢谢。
我有一个 IPv6 本机容器,在端口 8000 上运行一个小型 Web 应用程序。
在 Docker 主机上,我可以使用全局 IP 访问 Web 服务,但从另一台主机连接时收到“连接被拒绝”。但是,可以从其他主机对容器执行 ping 操作。
容器中的服务有效
# curl "http://[2a01:4f8:10a:2cc5:0:242:ac11:2]:8000"
I'm b6032b33bc12
Run Code Online (Sandbox Code Playgroud)
但是,从另一台主机运行:
{2.1.5p273} curl "http://[2a01:4f8:10a:2cc5:0:242:ac11:2]:8000"
curl: (7) Failed to connect to 2a01:4f8:10a:2cc5:0:242:ac11:2 port 8000: Connection refused
Run Code Online (Sandbox Code Playgroud)
然而,ipv6 地址是可 ping 通的:
{2.1.5p273} ping6 2a01:4f8:10a:2cc5:0:242:ac11:2
PING 2a01:4f8:10a:2cc5:0:242:ac11:2(2a01:4f8:10a:2cc5:0:242:ac11:2) 56 data bytes
64 bytes from 2a01:4f8:10a:2cc5:0:242:ac11:2: icmp_seq=1 ttl=60 time=0.385 ms
64 bytes from 2a01:4f8:10a:2cc5:0:242:ac11:2: icmp_seq=2 ttl=60 time=0.452 ms
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
有关我的环境的更多详细信息:
# docker -
Docker version 17.03.1-ce, build c6d412e
Run Code Online (Sandbox Code Playgroud)
该守护进程使用以下参数来启用 ipv6:
--experimental=true --ipv6 --fixed-cidr-v6=2a01:4f8:10a:2cc5::2/64 …Run Code Online (Sandbox Code Playgroud) 具有内核 4.4 的 Ubuntu 16.04.5 曾经按预期工作:IPv4 是默认值。自从更改为内核 (hwe) 4.15 以来,它默认使用 IPv6。
它通过 Tunnelbroker 提供 IPv6,由路由器广播。
现在默认为 IPv6:curl ifconfig.co返回计算机的 IPv6。仅curl -4 ifconfig.co返回所需的 IPv4 地址。(curl -6 ifconfig.co如预期返回 IPv6)
$ ip rule list
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
$ ip -6 rule list
0: from all lookup local
32766: from all lookup main
$ ip route list
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel …Run Code Online (Sandbox Code Playgroud) 我们在 OVH 有一个专用服务器,分配了 2001:41d0:a:72xx::/64
我已将计算机设置在桥接到 WAN 的网段上,按照来自 主机的虚拟机的 IPv6 公共路由
网关为2001:41d0:a:72ff:ff:ff:ff:ff,外网
我们正在运行一堆虚拟 Debian 服务器。
我们的一些(较旧的)服务器很乐意将 ipv6 路由到网关,但我尝试设置的新服务器在 ping gw 时显示“目标无法访问;地址无法访问”。
防火墙设置相同(/64 的规则,不在主机级别),并且 /etc/network/interfaces 相同;ipv6 设置为静态。(原因地址不同)
在工作机和非工作机上,netstat -rn6|grep eth1 显示
2001:41d0:a:72xx::/64 :: U 256 2 40 eth1
2001:41d0:a:7200::/56 :: UAe 256 2 71 eth1
2001:41d0:a1:72xx::/64 :: UAe 256 0 0 eth1
2000::/3 2001:41d0:a:72ff:ff:ff:ff:ff UG 1024 2 63479 eth1
fe80::/64 :: U 256 0 0 eth1
::/0 fe80::205:73ff:fea0:1 UGDAe 1024 1 2 eth1
::/0 fe80::20c:29ff:fe22:60f8 UGDAe 1024 0 0 eth1
ff00::/8 :: …Run Code Online (Sandbox Code Playgroud) 是否可以创建仅具有 IPv6 地址的自定义桥接网络?
当我尝试通过以下方式创建自定义桥接网络时:
docker network create --driver bridge --ipv6 --subnet 2001:db8:2::/64 mybridge
Run Code Online (Sandbox Code Playgroud)
并检查我得到的创建的网络:
[
{
"Name": "mybridge",
"Id": "b09351a7b7b4936bc0b3fdc7627d4a13ef3260d3f914ae347756f6358ab3a27d",
"Created": "2019-02-26T11:41:37.261479401Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": true,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
},
{
"Subnet": "2001:db8:2::/64"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
Run Code Online (Sandbox Code Playgroud)
]
当我运行容器时,它会获取 IPV4 地址:
root@ip-10-0-3-167:/home/ubuntu# docker run -d --net mybridge redis
75fac838472a94519f30e2bdbcc10403a7a952fce285ee5d258fd87f0773f618 …Run Code Online (Sandbox Code Playgroud) ipv6 ×10
docker ×3
networking ×3
dhcp ×2
iptables ×2
arch-linux ×1
debian ×1
dhcp-server ×1
ip ×1
ip-routing ×1
ipv4 ×1
linode ×1
mtu ×1
ovh ×1
radvd ×1
routing ×1
scope ×1
windows ×1