要用ipv6首先你的openwrt路由內核必須已經支持ipv6,且能安裝相關軟件!
首先說說最簡單的ndp手工ipv6穿透,很簡單,看代碼詳解:
環境: wan口 eth1 lan口 br-lan wan對外網關:2001:250:1006:3006::1/64 lan內客戶端1:2001:250:1006:3006:2::20/80 lan內客戶端2:2001:250:1006:3006::2::21/80 客戶端網關:路由器lan口v6地址(沒有手動設置一個)。 設置系統支持: sysctl -w net.ipv6.conf.all.forwarding=1 #其他發行版需要開啟ipv6包轉發;openwrt默認就是會轉發的,這句可忽略。 sysctl -w net.ipv6.conf.all.proxy_ndp=1 #開啟鄰居代理功能,如果使用npd6的話,這句可忽略。 設置路由支持: ip -6 route add default via 2001:250:1006:3006::1 dev eth1 #wan口默認路由 ip -6 route add 2001:250:1006:3006:2::/80 dev br-lan #將發往lan內客戶端的數據交給lan口 ndp設置: ip -6 neigh add proxy 2001:250:1006:3006:2::20 dev eth1 #在wan口開啟對PC1的鄰居代理 ip -6 neigh add proxy 2001:250:1006:3006:2::21 dev eth1 #在wan口開啟對PC2的鄰居代理 。。。。。。有多少設備上ipv6就需要設置幾條ndp規則 然后,你要上網的電腦,配置ipv6的ip、網關:填寫路由lan口ipv6地址、dns (如he的dns:2001:470:20::2)
IPv6 NDP(自動獲取ip地址)
IPv4由於NAT的存在共享上網是想當的簡單(隨便一個不懂電腦的萌妹子給家里搞一台TP-Link,就知道設置PPPoE認證然后就NAT組建家庭局 域網共享上網了……讓我等苦逼技術死宅沒有了上門幫忙的機會 QAQ),IPv6標准協議里面木有NAT,讓我頓時費解了一把,后來谷歌了一下發現北郵有一群學生做了一個創新項目實現了IPv6的NAT,當時感覺是 各種膜拜啊……還是內核級的項目啊卧槽……難道我又要改內核代碼然后重新編譯OpenWRT了啊……
后來仔細研究了一下,果然北郵那個項目還是沒啥意思的,有點坑經費的感覺,因為IPv6有一種更好的解決方案:Proxy Neighbour Discovery Protocol(鄰居發現協議),具體可以看:http://en.wikipedia.org/wiki /Neighbor_Discovery_Protocol。
簡單來說,NAT就是把內網終端偽裝起來請求出去,同時數據會到有外網地址的Router,再讓此Router把數據包轉發給客戶端機器。由於IPv6的地址空間是相當相當的大,沒有必要再公用一個外網地址,可以讓每個內網的終端都具有一個外網地址
這個地址依然是不可再路由,這時就需要讓具有外網地址的Router幫忙告訴它的上層Router,這些外網地址在這個Router的內網中。
這種方式牛逼之處在於……什么UPnP,什么NAT穿透,全部都不需要了……P2P什么的嘛……完全無壓力……
繼續配置,我這里外網網卡是eth0,內網是br-lan
先安裝ndppd
opkg update && opkg install ndppd
看一下我的Global IPv6地址:
root@OpenWrt:/etc# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 8C:21:0A:A6:94:B3
inet addr:121.48.171.138 Bcast:121.48.171.255 Mask:255.255.255.128
inet6 addr: 2001:250:2000:7520:8e21:aff:fea6:94b3/64 Scope:Global
inet6 addr: fe80::8e21:aff:fea6:94b3/64 Scope:Link
UP BROADCAST RUNNING ALLMULTI MULTICAST MTU:1500 Metric:1
RX packets:517397 errors:0 dropped:450 overruns:0 frame:0
TX packets:777032 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:177017984 (168.8 MiB) TX bytes:688621714 (656.7 MiB)
Interrupt:4
是2001:250:2000:7520:8e21:aff:fea6:94b3/64,因為是/64,所以無法繼續划分子網,就要使用剛才說的鄰居發現協議。
然后給內網網卡br-lan設置與eth0的地址前64位相同,后64位不同的IPv6地址(不要直接抄襲我的,如果你也在電子科大清水河……這樣咱們會沖突的),設置時前綴長度要大於64:
ip -6 addr add 2001:250:2000:7520:1::1/80 dev br-lan
修改/etc/ndppd.conf
proxy eth0{
router yes
timeout 500
ttl 30000
rule 2001:250:2000:7520:1::/80 {
auto
}
}
然后運行ndppd:/etc/init.d/ndppd start,這樣就配置好了。比內核級的NAT實現要輕松許多。
但是這個時候還不能客戶端自動獲得IP,radvd配置只能前綴為64,所以還需要dhcpv6 server:
opkg install radvd
opkg install wide-dhcpv6-server
配置/etc/config/radvd:
config interface
option interface 'lan'
option AdvSendAdvert 1
option AdvManagedFlag 1
option AdvOtherConfigFlag 1
list client ''
config prefix
option interface 'lan'
# If not specified, a non-link-local prefix of the interface is used
list prefix ''
option AdvOnLink 1
option AdvAutonomous 1
option AdvRouterAddr 0
配置/etc/config/dhcp6s,enabled設置為1
配置/etc/dhcp6s.conf
interface br-lan {
address-pool pool1 86400;
};
pool pool1 {
range 2001:250:2000:7520:1::200 to 2001:250:2000:7520:1::300 ;
};
啟動radvd和dhcpv6 server:
/etc/init.d/radvd start
/etc/init.d/dhcp6s start
注意順序,如果遇到錯誤,可以:
/etc/init.d/radvd restart
/etc/init.d/ndppd restart
這樣我們就配置好了IPv6的鄰居發現協議和IP地址的分配,這個時候連上路由器的客戶端已經可以自動獲得IPv4和IPv6的地址並無障礙訪問IPv4和IPv6的網絡了