我设置了一个开发环境,其中有多个网站的单独环回地址。
例如,我有以下内容:
127.0.0.1 www.example.com
127.0.0.2 foo.example.com
127.0.0.3 bar.example.com
127.0.0.4 waffles.example.com
Run Code Online (Sandbox Code Playgroud)
我想要一个等效的 IPv6 解决方案。
我已经知道您可以使用 ::1 作为环回地址,但是 ::2、::3 等似乎不起作用。
IPv6 中还有其他环回地址吗?有没有办法拥有多个唯一的环回地址?
我尝试使用以下方法将整个 IPv6 (/64) 块添加到接口
ip route add local 2001:41d0:2:ad64::/64 dev lo
Run Code Online (Sandbox Code Playgroud)
像描述在这里我的Debian服务器上,但我似乎失去了一些东西。
例如2001:41d0:2:ad64::fe
,如果我在本地ping一切正常,但如果我从远程机器尝试,则它不起作用。然后我尝试在 eth0 上添加路由:
ip route add local 2001::41d0:2:ad64::/64 dev eth0
Run Code Online (Sandbox Code Playgroud)
现在我什至无法在本地 ping 任何示例地址!
我有点迷茫,因为我似乎错过了一些东西,但我在这里找不到答案。
简而言之:我想2001:41d0:2:ad64::/64
绑定到 eth0,以便可以从我机器上的 Internet 访问此块包含的每个 IP。
我希望那里有人能指出我正确的方法。提前致谢。
ISP 提供的指南确实要求我将每个 IPv6 显式添加到接口中。我希望它是隐含的。
使用显式 IP 地址绑定的工作配置
/etc/network/interfaces:
auto eth0
iface eth0 inet static
address my.ip.v4
netmask 255.255.255.0
network my.network.address.ip
broadcast my.broadcast.address.ip
gateway my.gateway.ip
iface eth0 inet6 static
address 2001:41d0:2:ad64::fe
netmask 64
gateway 2001:41d0:2:adff:ff:ff:ff:ff
up ip addr add 2001:41d0:2:ad64::1/64 dev …
Run Code Online (Sandbox Code Playgroud) 可能的重复:
我可以将(大)地址块绑定到接口吗?
我有一个 /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 地址,每个 VM 可能提供 100 个地址。这样做有什么好处?您肯定只需要一个地址和多个端口吗?将 100 个 IPv6 地址指向同一个以太网接口会有什么好处?
谢谢
我有一个像 2001:face:feed:beef::/64 这样的子网。我想将它们全部分配给我的服务器,而无需手动分配每个地址,例如 2001:face:feed:beef::[123456789abcdef]...
在 ipv4 中,我们可能会使用 DNAT 来执行此操作,但是在 ipv6 中它没有 NAT 概念,所以我想知道这是否可行以及是否有一些解决方法。