一、前言.
近年来IPV6覆盖逐渐增大,部分地区的宽带运营商可以直接获取到全球v6地址,再加上本身覆盖就很广泛的校园网基础,ipv6用户其实不在少数。本身v6的初衷是解决v4地址不够而推出的,然而因为各种原因,并不是所有设备都需要或者能接入公网,这样就还是要回归到nat上。
先了解下IPV6-NAT(摘自百度)
1. 什么是NAT?
NAT即Network Address Translation,它可以让那些使用私有地址的内部网络连接到Internet或其它IP网络上。NAT路由器在将内部网络的数据包发送到公用网络时,在IP包的报头把私有地址转换成合法的IP地址。
2.在NAT实验中需要理解的术语:
1) 内部局部地址(Inside Local):在内部网络中分配给主机的私有IP地址。
2) 内部全局地址(Inside Global):一个合法的IP地址,它对外代表一个或多个内部局部IP地址。
3) 外部全局地址(Outside Global):由其所有者给外部网络上的主机分配的IP地址。
4) 外部局部地址(Outside Local):外部主机在内部网络中表现出来的IP地址。
3.NAT的优点和缺点:
NAT的优点:
(1) 对于那些家庭用户或者小型的商业机构来说,使用NAT可以更便宜,更有效率地接入Internet。
(2) 使用NAT可以缓解目前全球IP地址不足的问题。
(3) 在很多情况下,NAT能够满足安全性的需要。
(4) 使用NAT可以方便网络的管理,并大大提高了网络的适应性。
NAT的缺点:
(1) NAT会增加延迟,因为要转换每个数据包包头的IP地址,自然要增加延迟.
(2) NAT会使某些要使用内嵌地址的应用不能正常工作.
4.NAT的工作原理:
当内部网络中的一台主机想传输数据到外部网络时,它先将数据包传输到NAT路由器上,路由器检查数据包的报头,获取该数据包的源IP信息,并从它的NAT映射表中找出与该IP匹配的转换条目,用所选用的内部全局地址(全球唯一的IP地址)来替换内部局部地址,并转发数据包。
当外部网络对内部主机进行应答时,数据包被送到NAT路由器上,路由器接收到目的地址为内部全局地址的数据包后,它将用内部全局地址通过NAT映射表查找出内部局部地址,然后将数据包的目的地址替换成内部局部地址,并将数据包转发到内部主机。
二、开始.
首先我们的网络支持ipv6(这是废话),其次需要一台支持lede的设备;然后设备可以以动态获取ipv6(wan6有v6地址 可以ping通ipv6.google.com)。
这是前提。
1.准备工作
注意以下不是必要操作,如有luci界面自行略过。
lede默认开启了ssh端口22,我们使用xshell等终端连接到路由器,输入帐号密码,然后终端内输入命令:
opkg update
opkg install luci
opkg install luci-i18n-base-zh-cn
opkg install luci-i18n-firewall-zh-cn
opkg install nano
这样luci界面就安装好了并且有了中文。
2.安装IPK包
将设备接入有提供IPv6的接口,
在luci界面里-接口-一栏设置好IPv4联网(pppoe或者其他),联网成功后,然后使用ping ipv6.google.com查看是否可以ping通,ping通则继续以下操作。
安装本次nat的必要包
opkg install ip6tables
opkg install kmod-ipt-nat6
这两个包对内核要求还是蛮高的所以选择lede
3.开始配置
使用终端nano、vi等命令修改也可以使用winscp工具打开
修改/etc/config/network文件,添加以下字段,若已存在字段仅地址不同,可以不用修改。或者改成你喜欢的前缀。
config globals 'globals'
option ula_prefix 'eeee:eeee:eeee::/48'
→等效于
在luci的web界面修改
接口-全局网络选项-IPv6 ULA 前缀,前缀可以不和lz一样可以自定义
4.配置DHCPv6
终端内使用nano、vi、winscp
修改/etc/config/dhcp文件,将config dhcp 'lan'那一栏修改为以下内容:
config dhcp 'lan'
option interface 'lan'
option start '100'
option limit '150'
option leasetime '12h'
option dhcpv6 'server'
option ra 'server'
option ra_management '1'
option ra_default '1'
等效于
luci界面里打开
接口-lan-下方 DHCP服务器-ipv6设置
DHCPv6 服务 (DHCPv6-Service) 服务器模式
路由通告服务 (Router Advertisement-Service) 服务器模式
NDP 代理 (NDP-Proxy) 禁用
DHCPv6 模式 (DHCPv6-Mode) 无状态的 + 有状态的
总是通告默认路由(Always announce default Router) 勾选
5.添加防火墙脚本
修改/etc/firewall.user在文末添加
假设WAN对应的接口为eth0.2,不是eth0.2的,自行修改成你的wan口设备名,添加以下内容:
ip6tables -t nat -A POSTROUTING -o eth0.2 -j MASQUERADE
等效于在luci界面
网络-防火墙-自定义规则 添加这一行 保存应用
6.配置网关(重要!)
在终端内使用
ip -6 route | grep default
查看当前IPv6默认路由
结果显示如下
default from (your ipv6) via (gateway) dev eth0.2 proto static metric 512
其中(gateway)括号里的 就是你网络状态下的网关
例如楼主这里显示
default from 2001:abcd:abcd::d:abcd via fe80::224e:71ff:bbbb:cccc dev eth0.2 proto static metric 512
那么其中的
fe80::224e:71ff:bbbb:cccc
就是当前网络的默认网关,这一步至关重要
我们需要将其添加到默认路由
终端里输入命令
route -A inet6 add default gw fe80::224e:71ff:bbbb:cccc dev eth0.2
至此配置方面就好了
接下来重启下服务使设置生效
/etc/init.d/firewall restart
/etc/init.d/network restart
注意:
如果是使用其他低内核的固件做如上的操作,
firewall那条命令的输出显示可能会提示什么ip6tables错误的 说明最开始安装的ip6tables不支持此固件的低内核 请换高版本内核使用此教程。network 重启会有短暂的断网 耐心等待网卡的DHCP。
两条命令结束后 电脑仍然无法打开ipv6的话 请重启电脑的网卡 具体操作网络和共享中心-更改适配器设置,右击禁用网卡,再启用网卡。
此时电脑就应该可以正常访问v6了。
7.添加开机自动加入IPv6路由
由于route -A inet6 add default gw 命令重启会失效所以我们需要建立一个脚本让路由器开机自动添加
具体操作
在/etc/hotplug.d/iface/目录下新建名字为 90-ipv6 的文件
修改内容为
#!/bin/sh
[ "$ACTION" = ifup ] || exit 0
route -A inet6 add default gw fe80::224e:71ff:bbbb:cccc dev eth0.2
注意:记得修改成自己的网关
然后给予可执行权限:
chmod +x 90-ipv6
至此开机启动也完成了。
三、最后
通过http://test-ipv6.com/或者http://ipv6-test.com/测试IPv6是否正常
如果ipv6访问不正常 则可能是dns污染 手动修改wan6的dns方法是:
修改wan6-高级设置下的这里 取消勾选对端通告的DNS服务器 自己自定义为谷歌的v6dns
注意别填错了 取消勾选他会变到下一行
-----------------------------------------------------------------------------------------------
使用对端通告的 DNS 服务器
留空则忽略所通告的 DNS 服务器地址
使用自定义的 DNS 服务器
2001:4860:4860::8888
2001:4860:4860::8844
----------------------------------------------------------------------------------------------------
会玩的童鞋可以更进一步可以修改dnsmasq的配置文件 指定域名指定解析