挖井

类库大魔王的挖井日记

挖一口属于自己的井


在家部署IPv6

自从苹果要求iOS app能支持IPv6以来,我就一直想在自己屋里搞一个IPv4/IPv6双栈的环境,不为实用,只是为了满足那点强迫症,直到现在才有点进展。

屋里拉了电信的宽带,是只能pppoe得到一个公网IPv4地址,换了用BananaPi做的路由后,有些事情也变得清晰了,可以从Hurricane Electric申请一个IPv6 tunnel,这个过程很简单,而且电信给的IPv4地址是会定期变更的,这家tunnel服务可提供了API可以随时更新绑定的IPv4地址,后面再具体说说。

在Create Regular Tunnel之后,便可以得到一些有用的信息,比如Server IPv4 Address,Client IPv6 Address,Routed /64等等,同时网页上也有自动生成配置命令的功能,我的路由器装了Raspbian,就选择Linux-net-tools,得到以下命令:

ifconfig sit0 up
ifconfig sit0 inet6 tunnel ::222.111.222.111
ifconfig sit1 up
ifconfig sit1 inet6 add 2001:1111:2222:3333::2/64
route -A inet6 add ::/0 dev sit1

其中第2行的IPv4地址便是前面提到的Server IPv4 Address,第4行的IPv6地址便是Client IPv6 Address。执行以上命令,再用ifconfig看,便多出了sit0sit1两个接口,这时如果IPv4本身没问题的话,路由器应该可以连接IPv6网络了,可以用命令ping6 ipv6.google.comcurl -vv -6 https://ipv6.google.com测试。

在网页的Advance页,还有一个Example Update URL,可以在电信分配的IPv4地址发生变化后,更新新的IPv4地址用:

curl -vv -4 "https://username:update-key@ipv4.tunnelbroker.net/nic/update?hostname=tunnel-id"

除了更新IPv4地址到Hurricane Electric,还得更新sit0sit1两个接口,就是先ifconfig sit0 downifconfig sit1 down,再执行最开始那几条命令。

路由器能工作后,要让局域网中其他机器也能通过IPv6上网,就得给其他机器分配IPv6地址,并通过路由器转发路由。在路由器上安装radvd,这个软件可以用来分配IPv6地址给局域网中其他机器,修改配置文件/etc/radvd.conf:

interface eth0 
{
	AdvSendAdvert on;
	AdvLinkMTU 1480; 
	MaxRtrAdvInterval 300;
  	MinRtrAdvInterval 60;

	prefix 2001:1111:1111:1111::/64
	{
		AdvRouterAddr on; 
		AdvOnLink on; 
		AdvAutonomous on;
   		AdvPreferredLifetime 600;
    		AdvValidLifetime 3600;
	};
	route ::/0 {
  	};
};

第1行的eth0根据自己系统中的网络接口而设定,下面的prefix后面的地址段是网页中给出的Routed 64,执行命令sudo systemctl start radvdradvd运行起来,如果radvd运行不起来,可以重启系统再试。

再给eth0绑定一个静态IPv6地址,修改配置文件/etc/network/interfaces,加入几行:

iface eth0 inet6 static
  address 2001:1111:1111:1111::1
  netmask 64

地址前缀跟Routed /64的相同,最后::1则随意,只不过我们比较习惯用1来作为网关的地址。然后重启网络服务即可sudo systemctl restart networking。估计电信接入的pppoe得到的IPv4地址在重启网络服务后又变了,需要再向Hurricane Electric更新一下。

最后,打开IPv6转发:sudo sysctl -w net.ipv6.conf.all.forwarding = 1

到此为止,路由器上的设置就完成了,其他机器还有最后一步要做。在其他机器运行ifconfig,应该可以看到已经分配到2001:1111:1111:1111:wwww:xxxx:yyyy:zzzz这样的IPv6地址,可以ping一下路由器:

ping6 2001:1111:1111:1111::1

正常情况下,应该已经能ping通。然后设置IPv6网关为路由器的地址(这一步并不是必需的,好像IPv6具有自动配置的能力,有的机器上没有这一步也能正常工作了,如果不能工作,便执行这一步):

sudo route -A inet6 add default gw 2001:1111:1111:1111::1

这时用命令ping6 ipv6.google.comcurl -vv -6 https://ipv6.google.com测试,应该就已经能正常工作了。

至此,IPv6环境就全部配置好了。


比较郁闷的是我的二级路由器R6300v2刷了梅林固件后好像不能分配内网IPv6地址,网上看也有人提出了相同的问题,但并没有答案。

本文地址:

https://minidump.info/blog/2017/01/ipv6-at-home/

上一篇

Avege WIP(三)

Avege开源后并没有太大的变化,除了收获了180多个star,大概也没什么人真正用上,别说PR了,连issue都没有,不过也收集了一些意见和建议。后端的代理库换了一个,新换的库代码更精简,功能更丰富,更新也更积极。稍微更新了一下SSR的协议,支持了单端口多用户,不过没测试过,毕竟也才修改了不...…

Shareware 全文阅读
下一篇

过完年了

节前请了2天年假,节后公司又比法定多放2天,于是今天仍然在家闲着。这次春节是我在老家呆得时间最短的一次吧,初二清早就去了妹子家,然后初四带着妹子家亲戚回去吃了一顿中饭,之后就在妹子家一直呆到昨天下午。终于定下了结婚的日子,很多事情要开始忙起来了。…

Life 全文阅读