自建 6in4 Tunnel Server (iproute2)

IPv4下连IPv6有无数种解决方案,传统的6to4, 6in4, TEREDO…没兴趣讲优缺点,可以在wikipedia的页面上看看各家都用了啥。

TunnelBroker.net 应该是没IPv6的地方最流行的上IPv6的解决方案了。
如果你觉得它不爽,其实自己搞一个也没那么难。

上边wikipedia页面里说HE的技术实现是Unknown。其实自己试过一次大概都能知道应该往哪个方向去研究它的技术实现了。

贴一个我路由器上的IPv6 Tunnel信息。

首先,UBNT给我创建的interface是tun0;其次 Link encapsulation 是 IPv6-in-IPv4,也就是传说中的 6in4;再往下看,POINTOPOINT
再加上TunnelBroker的Example Configurations里给了一个iproute2的配置方法:

思路很简单了。

假设服务器端为S,用户路由为R,则两边的参数逻辑应该是:
S:

Remote: R.ipv4
Local: S.ipv4
V6 IP: S.ipv6
Route: v6子网/CIDR

R:

Remote: S.ipv4
Local: R.ipv4
V6 IP: R.ipv6
Route: ::/0 即默认路由

具体来说,假设你S的IP为1.1.1.1,可支配的IPv6 pool为 2400:1234:5678:9abc::/64,R的IP为2.2.2.2,上述的配置可能是:

S.ipv4 = 1.1.1.1
S.ipv6 = 2400:1234:5678:9abc:1000::1/80

v6子网/CIDR = 2400:1234:5678:9abc:2000::/80

R.ipv4 = 2.2.2.2
R.ipv6 = 2400:1234:5678:9abc:1000::2/80

命令还不会的,可以阅读Setup of point-to-point tunnel

接下来还有一个问题,我的公网不是固定IP怎么办?
简单。
对于S端来说,Remote依旧是R.ipv4,必须是确定的IP。
对于R端来说,Local可以是0.0.0.0。
每次R更换IP后,需要通知S来更新Remote。

再搞不定?
没问题,看我的github项目:https://github.com/sskaje/6in4

另外,Linode 可以申请IPv6的池子,可以是 /56 或者 /64,可以自建tunnel玩。

自建 6in4 Tunnel Server (iproute2) by @sskaje: https://sskaje.me/2016/01/create-your-own-tunnelbroker-net-iproute2/

Incoming search terms:

抛开路由为局域网内机器启用IPv6

支持IPv6这事情不一定非得要路由上配,局域网内只要有Linux机器能用IPv6就行。
这种事情做之前,对于完全不会的人和会的人都很简单,但对我这种稍微懂一点的,还没做可能就先想多了。

测试环境

公司
路由:TP-Link某老旧企业路由,不支持IPv6
Linux:Debian Jessie, 服务主机,兼顾dns,dhcp等等服务,LAN接口eth0
网络:北京联通家庭光纤 PPPoE
IPv6 服务:Tunnel Broker
其他软件:dnsmasq, dhcpd

Continue reading “抛开路由为局域网内机器启用IPv6” »

抛开路由为局域网内机器启用IPv6 by @sskaje: https://sskaje.me/2016/01/linux-ipv6-tunnel-and-advertise/

Incoming search terms:

TunnelBroker for EdgeRouter Lite

创建隧道

在北京联通这种不给IPv6网络的ISP下生存,总有走v6翻墙的欲望。
免费的Tunnel服务很多,最出名莫过HE.net的TunnelBroker

首先申请一个Tunnel。
访问:

注册登录之后,创建并输入当前路由公网IP “YOUR.ROUTER.INTERNET.IP”。

创建成功后会被跳转到

XXXXX的部分是一串数字,所谓的Tunnel ID.

在这个页面上选择第二个标签页 “Example Configurations
选择 “Vyatta / Ubiquiti EdgeMAX

文本框会自动生成如下配置:

remote-ip是创建时选择的远端服务器IP,local-ip本地当前的出口IP。
鉴于ISP给的IP都是动态的,所以local-ip改成如下‘0.0.0.0’。

如果之前有配置过tunnel,需要重新配置,则先删除既有的:

下面开始命令配置tunnel

Router Advert

配置完tunnel,就得配局域网内的配置了,毕竟只有路由能上v6是不够的

如果你本地的DNS规则有过配置,radvd-options 的配置一定要把ipv6地址设成路由器的v6地址

实践证明,我之前折腾了好久的dhcpv6没用,但是配置也可以贴出来

自动更新IP

之前一片EdgeRouter Lite相关的配置文章里,我把He.net提供的DDNS配置好了。Dynamic DNS on HE.net, HE.net Dynamic DNS on Ubiquiti Router.

脚本更新

首先按如下路径生成ddns专用的key

尝试过好多次,EdgeRouter Lite无法通过配置参数添加多个同类型的ddns配置。所以先提供一个简单粗暴的方法。

参考 https://forums.he.net/index.php?topic=1994.0 的说明,有如下的客户端语法:

新增文件 /etc/ppp/ip-up.d/update-tunnelbroker-ip
内容如下:

完成后给执行权限

复用ddclient配置

早先在配置DDNS的时候做过一些尝试,结果发现删除配置时 /etc/ddclient/ 目录下自动生成的配置并未被删除。
而tunnelbroker的IP更新协议跟ddns一样都是用了dyndns风格的。
所以第二个思路是自己写个配置文件(未验证)
参考模板

奇葩问题

从开始配置Tunnel到最终写这篇文章,中间隔了估计有好几个月,一直在更新IP(手动或者自动)时被提示无法连接到我的路由,HE的测试IP是 66.220.2.74
还发邮件问过那边,也怀疑了几种可能,但是确认中国的其他IP都没问题。

就在刚才,突然想到可能是路由表错了。
因为之前整理过 Google/Twitter/Facebook 的IP段(Google IP Address Ranges, EdgeOS PPTP VPN客户端配置),简单粗暴地直接把零散的IP段合并成一个个CIDR 16的网段,然后指向了我的pptpc0。
其中就有

核对了一下FB的网段,调整了路由:

TunnelBroker for EdgeRouter Lite by @sskaje: https://sskaje.me/2015/05/tunnelbroker-edgerouter-lite/

Incoming search terms:

Ocserv IPv6

I’m using AnyConnect both on iOS and OS X, you can read previously posted article on my blog: anyconnect, openconnect, ocserv.

You can find ipv6-network and ipv6-prefix in ocserv’s sample.config:

which means ocserv should be compatible with IPv6.
And, in AnyConnect for iOS, ipv6 can be found somewhere, seems ipv6 is also compatible here.

My VPN is hosted on Linode VPS. Linode provides free IPv6 address pool. Open a ticket and ask for an address pool, you’ll get your own pool routed to your VPS’s ipv6 address.
After that, set the ipv6-network and ipv6-prefix.

Ocserv 0.8.9 does not send correct headers to AnyConnect for iOS, but 0.9.0-dev does.
I can now get a correct ipv6 address on my iPhone but with no connectivity. As it’s said, X-CSTP-Split-Include/Exclude is not well handled by AnyConnect for IPv6 addresses.
After that, I tried the latest AnyConnect for OSX, you can download it here: http://dl.sskaje.me/anyconnect/4.0/4.0.00051/

IPv6 is also assigned to my MBP, also with route, but still not working.

Ocserv IPv6 by @sskaje: https://sskaje.me/2015/01/ocserv-ipv6/

Incoming search terms: