在OpenWRT中配置isatap以及IPv6 NAT的方法

2015/7/6 posted in  技术 comments

在紫荆公寓这边,由于原生IPv6需要认证才能使用,十分不方便。而使用isatap隧道的方法访问IPv6则十分的稳定。但是由于isatap隧道只能够得到一个GlobalIPv6的地址,因此需要在路由器上启用IPv6 NAT才能够使得路由器后面的设备无缝访问IPv6资源。之前的路由器,在配置好之后稳定地运行了一年有余,前几日因为一些需求,需要重新配置路由器,因此将配置的过程记录下来,供今后参考。

网络情况

  • 软件版本: OpenWRT Barrier Breaker 14.07
  • WAN: 通过isatap接入到IPv6
  • LAN: 通过radvd广播得到IPv6地址,使用ip6tables的NAT转发功能访问外网

配置

  • 安装软件包

用到的软件包有6in4 kmod-ipt-nat6 luci-proto-ipv6 luci-app-radvd,最后两个是跟luci相关的,不用界面的可以忽略。

  • 禁用自带的IPv6管理

/etc/config/network中,将config globals 'globals'部分删掉,将config interface 'lan'中的ip6assignip6addr删掉,在lanwanwan6中分别加上option delegate 0,表示不使用内置的IPv6配置。

  • 配置isatap隧道

config interface 'wan6'中的原来的内容删掉,替换如下内容:

config interface 'wan6'            
        option proto '6in4'           
        option ipaddr '59.66.210.47'         
        option peeraddr '166.111.21.1'
        option ip6addr '2402:f000:1:1501:200:5efe:59.66.210.47/64'
        option ip6prefix 'fc00:512b:512b::/64'                    
        option delegate '0'

其中ipaddr是路由器的ipv4地址,peeraddrisatap隧道服务器的地址,ip6addr是路由器的ipv6公网地址。这里要注意的是,一定要加上ip6prefix这一项,该项填写的是给路由器下游分配的ipv6地址的前缀,如果不填写这一项的话,可能会出现在路由器中能够ping通外部ipv6地址,但是在下游的网络设备中却ping不通的问题。

  • 配置LAN

我们需要给LAN一个ipv6地址,在config interface 'lan'中,加入一行option ip6addr 'fc00:512b:512b::1/64'。要注意该ipv6地址的前缀一定要和前面配置isatap中填写的一致。

  • 配置radvd

/etc/config/radvd中,使用下面的配置

config interface                                                                
        option interface 'lan'                                                  
        option AdvSendAdvert '1'                                                
        list client ''                                                          
        option ignore '0'                                                       
        option IgnoreIfMissing '1'                                              
        option AdvSourceLLAddress '1'                                           
        option AdvDefaultPreference 'high'                                      
        option MinRtrAdvInterval '5'                                            
        option MaxRtrAdvInterval '10'                                           
                                                                                
config prefix                                                                   
        option interface 'lan'                                                  
        option AdvOnLink '1'                                                    
        option AdvAutonomous '1'                                                
        option ignore '0'                                                       
        list prefix 'fc00:512b:512b::/64'                                       
        option AdvRouterAddr '1'                                                
                                                                                
config route                                                                    
        option interface 'lan'                                                  
        list prefix ''                                                          
        option ignore '1'                                                       
                                                                                
config rdnss                                                                    
        option interface 'lan'                                                  
        list addr ''                                                            
        option ignore '1'                                                       
                                                                                
config dnssl                                                                    
        option interface 'lan'                                                  
        list suffix ''                                                          
        option ignore '1'

配置radvd开机启动

/etc/init.d/radvd enable
  • 设置NAT转发

/etc/firewall.user中,最后加上一句ip6tables -t nat -I POSTROUTING -s fc00:512b:512b::/64 -j MASQUERADE

  • 重启网络服务,启动radvd
/etc/init.d/network restart
/etc/init.d/radvd start

如果正常的话,内网就可以获得ipv6地址,并且能够正常访问ipv6网络了 。