openwrt+ndp+ndppd+radvd+dhcpv6,ipv6穿透配置指南


要用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的網絡了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM