小编rac*_*aco的帖子

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 ×1

linux-networking ×1