IETF一直不推荐人们使用NAT66(NAT这个词在IPv6上已经被占用)。这么做并非无中生有,多年以来,由于NAT网关的存在,本来应该为无状态(stateless)、无连接(connectionless)的IP协议已经变成了一种临时的“有状态(stateful)”、面向连接(connection-oriented)的协议,这主要是因为大量的设备需要接入互联网而不得已为之。
这种地址转换能给我们带来一种虚假的安全感。我已经听过许多人表达过这样一种看法:“从内部网络安全角度来看,NAT是必不可少的一环(然而事实并非如此)”。
IPv6地址空间非常庞大,运营商可以给客户分配足够多的/64地址。但是,这可是学校.
由于学校的IPv6下发只有一个/128,且对应客户端强绑定mac地址,如 "2001:xxx:xxx:xxxx:macAddress",因此,不得不在路由器下使用nat66使子设备接入教育网.
我们的路由器需要准备好:
- 设置一个内网IPv6地址池
- 安装nat6的openwrt插件和ip6tables,软件包名是
kmod-ip6tables
和kmod-ipt-nat6
- 编辑/etc/config/network,在wan配置中加入你的内网IPv6地址池.
config interface ‘lan’ option ip6addr yourIPv6Pool
- 设置内核开启IPv6的转发.
cat /proc/sys/net/ipv6/conf/all/forwarding
并确保结果是1.
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
sysctl -a
- 编辑防火墙规则 "/etc/config/firewall",需要注意的是:这里fd23:d50c:491d::/48是我的路由器本地IPv6地址.eth0.2则是wan6网口.
# allow icmp on ipv6 ip6tables -I INPUT -p ipv6-icmp -j ACCEPT ip6tables -I OUTPUT -p ipv6-icmp -j ACCEPT ip6tables -I FORWARD -p ipv6-icmp -j ACCEPT # allow loopback ip6tables -A INPUT -i lo -j ACCEPT ip6tables -A OUTPUT -o lo -j ACCEPT #allow lan forwarding ip6tables -A FORWARD -i eth0.2 -j ACCEPT ip6tables -A OUTPUT -o eth0.2 -j ACCEPT # allow link-local ip6tables -A INPUT -s fe80::/10 -j ACCEPT ip6tables -A INPUT -s fe80::/10 -j ACCEPT # allow multicast ip6tables -A INPUT -s ff00::/8 -j ACCEPT ip6tables -A OUTPUT -s ff00::/8 -j ACCEPT # allow forwarding ip6tables -A FORWARD -i eth0.2 -j ACCEPT ip6tables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT #Add ipv6-ipv6 NAT chain ip6tables -t nat -I POSTROUTING -s fd23:d50c:491d::/48 -o eth0.2 -j MASQUERADE
- 确认默认路由指向IPv6网口,
ip -6 route
- 如果没有或者是出现
route default via globalipv6address dev youripv6interface
,你需要将这条删掉并重新添加ip route add ::/0 dev youripv6address
以匹配ip6tables的nat链. - 重启network和iptables.
/etc/init.d/network restart
/etc/init.d/firewall restart
- 系统启动时候,创建一个开机启动项,自动添加默认route
vim /etc/init.d/autoroute
#!/bin/sh /etc/rc.common #/init.d/autoroute START=99 start(){ ip -6 route add ::/0 dev eth0.2 echo "autoRoute is startd" } stop() { ip -6 route del ::/0 dev eth0.2 echo "autoRoute is stopd" }
然后添加
service enable autoroute
添加进开机启动项.
- 测试你的IPv6链接.