miaotony / miaotony.github.io

My personal website. Welcome~
https://miaotony.xyz
2 stars 1 forks source link

利用TunnelBroker给阿里云ECS配置公网IPv6 | MiaoTony's小窝 #35

Open miaotony opened 4 years ago

miaotony commented 4 years ago

https://miaotony.xyz/2020/03/03/Server_ObtainIPv6ViaTunnelBroker/

最近折腾了一下,利用Hurricane Electric提供的免费IPv6 Tunnel Broker,让阿里云的ECS拥有了IPv6地址(非原生)。

kingchun commented 3 years ago

发现一位大佬

miaotony commented 2 years ago

@wordlesswind Protocol 41 跟端口 41 是没有关系的,不需要放通端口 41,另外建议为 eth0 绑定 Routed /64 静态地址:https://chronos-tachyon.net/reference/debian-ipv6-and-hurricane-electric/#TOC-Debian-to-LAN 因为 Routed /64 地址可以配置 rDNS

但是令我感到疑惑的是,该地址似乎没有路由,所以无法访问。而我能找到的所有教程(例如这一篇)都没有提到是否需要为其配置路由的问题🤔

~~重启后又可以了( 果然重启能够解决 98% 的问题(~~

虽然外网能够 ping 通机器,但是机器无法通过 eth0 访问外网,烦(

查了一下,Protocol 41 跟端口 41 确实没关系,当时应该是参考了其他文章然后这么配的,后面我再确认一下。

图片

路由的话应该是配置接口的时候就配好了的,您可以 ip -6 route 看看路由怎么走的,正确的话应该都是走 he-ipv6 接口出去的。

另外给 eth0 配置 Routed /64 静态地址应该不会影响上网吧... rDNS 是 HE 那边配的倒是了。

不知道说得对不对,有点不大明白您的问题(小声

miaotony commented 2 years ago

@wordlesswind

@miaotony

@wordlesswind Protocol 41 跟端口 41 是没有关系的,不需要放通端口 41,另外建议为 eth0 绑定 Routed /64 静态地址:https://chronos-tachyon.net/reference/debian-ipv6-and-hurricane-electric/#TOC-Debian-to-LAN 因为 Routed /64 地址可以配置 rDNS

但是令我感到疑惑的是,该地址似乎没有路由,所以无法访问。而我能找到的所有教程(例如这一篇)都没有提到是否需要为其配置路由的问题🤔

~~重启后又可以了( 果然重启能够解决 98% 的问题(~~

虽然外网能够 ping 通机器,但是机器无法通过 eth0 访问外网,烦(

查了一下,Protocol 41 跟端口 41 确实没关系,当时应该是参考了其他文章然后这么配的,后面我再确认一下。

图片

路由的话应该是配置接口的时候就配好了的,您可以 ip -6 route 看看路由怎么走的,正确的话应该都是走 he-ipv6 接口出去的。

另外给 eth0 配置 Routed /64 静态地址应该不会影响上网吧... rDNS 是 HE 那边配的倒是了。

不知道说得对不对,有点不大明白您的问题(小声

哈哈,我的错,没有说清楚。我的需求是建立一个邮件发信服务器,所以需要配置 rDNS,并且由于只有 Routed /64 静态地址才能配置 rDNS,而 Client IPv6 Address 不行,所以我必须通过Routed /64 静态地址建立连接。但是现在的情况是,外界可以 pingeth0 绑定的静态地址,而机器却无法通过 eth0 访问外界。

curl www.qq.com 为例:

curl -6 -I --interface he-ipv6 https://www.qq.com/ HTTP/1.1 200 OK Date: Thu, 23 Dec 2021 14:49:24 GMT Content-Type: text/html; charset=GB2312 Connection: keep-alive Server: squid/3.5.24 Vary: Accept-Encoding Vary: Accept-Encoding Expires: Thu, 23 Dec 2021 14:50:24 GMT Cache-Control: max-age=60 Vary: Accept-Encoding Vary: Accept-Encoding X-Cache: HIT from shenzhen.qq.com X-Frame-Options: SAMEORIGIN Content-Security-Policy: frame-ancestors https://*.qq.com X-Content-Type-Options: nosniff

he-ipv6 正常访问

curl -6 -I --interface eth0 https://www.qq.com/ curl: (7) Couldn't connect to server

eth0 直接瞬间提示无法连接服务器

至于 ip -6 route

2001:470:c:3a7::1 dev he-ipv6 metric 1024 pref medium 2001:470:c:3a7::/64 dev he-ipv6 proto kernel metric 256 pref medium 2001:470:d:3a6::/64 dev eth0 proto kernel metric 256 pref medium default dev he-ipv6 metric 1 pref medium default via 2001:470:c:3a7::1 dev he-ipv6 metric 1024 onlink pref medium

虽然默认通过 he-ipv6,但如果我想上面那样选定 eth0 进行连接,路由会通过 he-ipv6 吗?我觉得现在的问题在这里。按这一篇 Debian, IPv6, and Hurricane Electric HOWTO 教程,我开启了 net.ipv6.conf.all.forwarding = 1。但是它似乎应该也不会默认转发?我对路由配置或者 iptables 不太了解,现在也不知道是不是就是没有路由导致的问题。

既然都指定了特定的 eth0 接口,而它本身没有出去的路由,那按理说应该不会走到 he-ipv6 了啊(

你说的这篇文章应该是说给在当前设备后面的设备分配 IPv6,比如当前是路由器或者其他的网关设备,需要给内网的其他设备分 IPv6。

imlk0 commented 2 years ago

@wordlesswind

@miaotony

@wordlesswind Protocol 41 跟端口 41 是没有关系的,不需要放通端口 41,另外建议为 eth0 绑定 Routed /64 静态地址:https://chronos-tachyon.net/reference/debian-ipv6-and-hurricane-electric/#TOC-Debian-to-LAN 因为 Routed /64 地址可以配置 rDNS。 ~但是令我感到疑惑的是,该地址似乎没有路由,所以无法访问~。而我能找到的所有教程(例如这一篇)都没有提到是否需要为其配置路由的问题thinking ~重启后又可以了( 果然重启能够解决 98% 的问题(~ 虽然外网能够 ping 通机器,但是机器无法通过 eth0 访问外网,烦(

查了一下,Protocol 41 跟端口 41 确实没关系,当时应该是参考了其他文章然后这么配的,后面我再确认一下。 图片 路由的话应该是配置接口的时候就配好了的,您可以 ip -6 route 看看路由怎么走的,正确的话应该都是走 he-ipv6 接口出去的。 另外给 eth0 配置 Routed /64 静态地址应该不会影响上网吧... rDNS 是 HE 那边配的倒是了。 不知道说得对不对,有点不大明白您的问题(小声

哈哈,我的错,没有说清楚。我的需求是建立一个邮件发信服务器,所以需要配置 rDNS,并且由于只有 Routed /64 静态地址才能配置 rDNS,而 Client IPv6 Address 不行,所以我必须通过Routed /64 静态地址建立连接。但是现在的情况是,外界可以 pingeth0 绑定的静态地址,而机器却无法通过 eth0 访问外界。 以 curl www.qq.com 为例:

curl -6 -I --interface he-ipv6 https://www.qq.com/ HTTP/1.1 200 OK Date: Thu, 23 Dec 2021 14:49:24 GMT Content-Type: text/html; charset=GB2312 Connection: keep-alive Server: squid/3.5.24 Vary: Accept-Encoding Vary: Accept-Encoding Expires: Thu, 23 Dec 2021 14:50:24 GMT Cache-Control: max-age=60 Vary: Accept-Encoding Vary: Accept-Encoding X-Cache: HIT from shenzhen.qq.com X-Frame-Options: SAMEORIGIN Content-Security-Policy: frame-ancestors https://*.qq.com X-Content-Type-Options: nosniff

he-ipv6 正常访问

curl -6 -I --interface eth0 https://www.qq.com/ curl: (7) Couldn't connect to server

eth0 直接瞬间提示无法连接服务器 至于 ip -6 route

2001:470:c:3a7::1 dev he-ipv6 metric 1024 pref medium 2001:470:c:3a7::/64 dev he-ipv6 proto kernel metric 256 pref medium 2001:470:d:3a6::/64 dev eth0 proto kernel metric 256 pref medium default dev he-ipv6 metric 1 pref medium default via 2001:470:c:3a7::1 dev he-ipv6 metric 1024 onlink pref medium

虽然默认通过 he-ipv6,但如果我想上面那样选定 eth0 进行连接,路由会通过 he-ipv6 吗?我觉得现在的问题在这里。按这一篇 Debian, IPv6, and Hurricane Electric HOWTO 教程,我开启了 net.ipv6.conf.all.forwarding = 1。但是它似乎应该也不会默认转发?我对路由配置或者 iptables 不太了解,现在也不知道是不是就是没有路由导致的问题。

既然都指定了特定的 eth0 接口,而它本身没有出去的路由,那按理说应该不会走到 he-ipv6 了啊( 你说的这篇文章应该是说给在当前设备后面的设备分配 IPv6,比如当前是路由器或者其他的网关设备,需要给内网的其他设备分 IPv6。

所以,我现在的问题是,如何将 eth0 上的 IPv6 流量,转发到 he-ipv6。又或者创建一条路由使得 etho 的 IPv6 地址的下一跳为 he-ipv6。我尝试创建路由几次,均提示“没有路由到主机”。

curl --interface eth0的具体影响是一个setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, "eth0"),手册上说它会Bind this socket to a particular device,根据这张经典的图,出站数据应该是不经过forward流程的,所以不会从eth0转发到he-ipv6(只有从eth0进来的包才会forward到he-ipv6)。

你给的那个Debian的教程中应该是把Routed /64地址配置到了eth-lan(我理解它是类似于路由器的lan口)、以及路由器下面的设备的eth0上,这样的话路由器底下的设备的包就会从eth-lan进来的,然后经过forwarding到了he-ipv6

要满足你使用Routed /64地址的需求,我觉得不应该在eth0上配Routed /64地址,而应该给he-ipv6配置一个Routed /64的地址,这样he-ipv6就有两个地址了,两个都能往外发包。为了让进程选择两个地址中Routed /64的那个地址,你可以在路由表中指定src参数,具体来说,删掉那条default dev he-ipv6的路由,把它改成default dev he-ipv6 src <Routed /64 的静态地址>就行了。

当然如果你非要将这两个地址分离到两个interface上,或者想要在traceroute上显示出两跳,我的建议是开个docker在里面配Routed /64地址,在外面还是保持Client IPv6 Address,这样会方便很多。