标签: ipv6

Linux & IPv6:如何绑定到任意 IPv6 地址?

可能的重复:
我可以将(大)地址块绑定到接口吗?

我有一个 /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 linux-networking

5
推荐指数
1
解决办法
3870
查看次数

IPv6:使用大于默认路由 MTU 的链路 MTU

配置 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)

ipv6 mtu radvd

5
推荐指数
1
解决办法
1236
查看次数

Linux ipv6转发

情况

我知道如何进行 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)

iptables ipv6

5
推荐指数
0
解决办法
1万
查看次数

为 docker 启用 IPv6 会破坏主机 IPv6 连接,导致主机都没有 IPv6 连接

前言:我在 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)

ipv6 linode arch-linux docker

5
推荐指数
1
解决办法
1328
查看次数

如何识别 LAN 上的恶意 IPv6 DHCP 服务器?

这将是一篇很长的文章,但我想提供完整的信息。

我有一个家庭/企业 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 地址! …

networking dhcp ipv6

5
推荐指数
0
解决办法
1万
查看次数

IPv6 地址生命周期:首选与有效租约

“首选生命周期”和“有效生命周期”租赁之间有什么区别?首选的意义是什么?为什么不直接使用有效的终身租赁?谢谢。

dhcp windows ipv6 scope dhcp-server

5
推荐指数
1
解决办法
7911
查看次数

没有与主机外部的 Docker 容器的 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)

networking iptables ipv6 docker

5
推荐指数
1
解决办法
2016
查看次数

Ubuntu 默认为 IPv6,应该默认为 IPv4

具有内核 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)

routing ip ipv6 ip-routing ipv4

5
推荐指数
1
解决办法
2万
查看次数

IPv6 外部网络网关 (OVH)

我们在 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)

debian ipv6 ovh

5
推荐指数
1
解决办法
4001
查看次数

Docker - 是否可以创建仅 IPv6 的桥接网络?

是否可以创建仅具有 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)

networking ipv6 docker

5
推荐指数
0
解决办法
681
查看次数