上一篇文章描述了如何在不借助 ISP 的情況下宣告自己的 IPv6, 此文章則是對上一篇文章的實現,這篇文章將使用 openwrt 和 bird6 進行,在閱讀此篇文章之前建議先閱讀前面 4 篇文章.
準備
實現廣播需要以下先決條件
- 一個 openwrt 的路由器 (這裡使用 newifi3 d2)
- 一個 ASN
- 一個 ipv6 block
這裡要注意,路由器的內存應該是 512M 或以上,宣告 ip 後會有很多路由表存在於自己的路由器上,這會佔用大量的內存 (pop 越多,對等越多則路由表越多,內存佔用越大), 所以要求路由器有大容量的內存來保存路由表,內存當然是越大越好,最低不應該低於 256m (如果你只打算使用 TunnelBroker 的 BGP Tunnel 來宣告 ipv6 則 256m 夠用), 而閃存則建議 32M 或以上,推薦使用支持硬 NAT 的路由器,以便達到最佳傳輸速度.
這裡推薦一部分自己篩選出來的其它幾個:edgerouter-x (內存閃存各 256m,cpu 為 mtk) edgerouter-lite (內存 512m 閃存未知,cpu 為:broadcom) wrt1900ac (256m 內存 128m 閃存,cpu 為:marvell)
安裝必要組件
所有用到的組件官方倉庫全部提供,所以只需要使用 opkg
安裝即可.
-
opkg update
-
opkg install bird6 birdc6 6in4 luci-proto-ipv6
也可以考慮安裝 luci-app-bird6
和 bird6-uci
進行配置和管理,但是我感覺 luci 很難用,所以沒有安裝它.
配置隧道
TunnelBrocker 的隧道詳情內就有配置示例,可以直接使用
-
uci set network.henet=interface
-
uci set network.henet.proto=6in4
-
uci set network.henet.peeraddr=你的公網ip
-
uci set network.henet.ip6addr=‘隧道的客戶端ipv6’
-
uci set network.henet.ip6prefix=‘/64’
-
uci set network.henet.tunnelid=你的隧道id
-
uci set network.henet.username=你的tunnerbroker的用戶名
-
uci set network.henet.password=‘你的tunnerbroker的密碼’
-
uci commit network
-
uci set firewall.@zone[1].network=‘wan henet’
-
uci commit firewall
-
/etc/init.d/network restart
-
/etc/init.d/firewall reload
然後在網絡 -> 接口,應該可以看到一個 HENET 的接口.
配置 bird6
關於隧道的配置上一篇文章內已經有說明,這裡只配置 bird6, 文件位置在 /etc/bird6.conf
-
log syslog all;
-
router id 你的公網ip;
-
filter normal_out
-
{
-
if proto = “Announce” then accept;
-
if proto = “NA” then reject;
-
reject;
-
}
-
protocol static Announce
-
{
-
import all;
-
route 2333:2333:233::/48 reject;
-
}
-
protocol static NA
-
{
-
route 2333:2333:233::/60 reject;
-
}
-
protocol kernel {
-
scan time 60;
-
import none;
-
}
-
#protocol static
-
#{
-
# route 2333:2333:233::/48 via 1234:5467:7890::2;
-
#}
-
protocol device {
-
scan time 60;
-
}
-
protocol direct
-
{
-
interface “br-lan”;
-
import all;
-
}
-
protocol direct
-
{
-
interface “6in4-henet”; #你的6in4網卡名稱
-
import all;
-
}
-
protocol bgp he
-
{
-
local as 你的asn;
-
source address 隧道客戶端ipv6;
-
import all;
-
export filter normal_out;
-
graceful restart on;
-
multihop 2;
-
neighbor 隧道服務端ipv6 as 6939;
-
}
關於 filter normal_out
和其下面兩個 protocol static
, 這是餘暉脈脈小伙伴提供給我的,其中 Announce
裡是需要宣告的 ip block,NA
裡則是需要過濾的 ip block, 為了防止給路由造成麻煩,一致認為宣告的 ip block 最小為 / 48, 這個 filter
就是為了實現此功能而設計的,在 Announce
內填寫宣告的 ip block, 分配給內部網卡或者子級設備使用的小於 / 48 的 block 或單一 ip 則要放進 NA
裡.
關於 router id
部分,事後驗證如果 router id
不能正確設置,則可能會導致不能正確路由的情況,下面代碼是由 Vicer 為我修改的壹個 hotplug 腳本,當 pppoe 撥號後會自動取獲得的 ip 修改 bird6 配置文件並重啟 bird6.
-
-
update_bird(){
-
IP=“$(curl -4 -s –connect-timeout 10 -m 20 https://ipinfo.io/ip | grep -o ‘[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}’)“
-
if [ ! -n “$IP“ ]; then
-
sleep 5s
-
update_bird
-
else
-
sed -i “s/^router id.*/router id $IP;/” /etc/bird6.conf
-
/etc/init.d/bird6 restart
-
fi
-
}
-
if [ “ifup” == “$ACTION“ ] && [ “pppoe-wan” == “$DEVICE“ ]; then
-
update_bird
-
fi
-
exit 0
將它保存到 /etc/hotplug.d/iface/30-bird
且權限設置為目錄內其它腳本同等權限即可,當然,文件名和前面的優先級可以修改.
配置好後重啟 bird6 後使用其它 ipv6 的機器進行路由追踪,如果發現有路由則為廣播成功.
後續配置
成功宣告之後則要將 ip 分配給自己或子級設備使用.
首先設置 HENET 網卡,添加路由前綴
網絡 -> 接口 ->HENET-> 編輯 -> 一般配置 -> 基本設置 ->IPv6 路由前缀,這裡填寫宣告的 ip block, 然後點擊保存並應用.
然後設置 lan 接口,為下級分配更小的 block 給二級路由器下面的設備使用,這裡需要設置多處
網絡 -> 接口 ->LAN-> 編輯 -> 一般配置 -> 基本設置 ->IPv6 分配长度,可以填寫任意小於 / 48 的設置,推薦設置為 / 60, 這樣子級設備還可以為它的子級設備分配更小的塊.
然後同頁面找到 DHCP 服务器 ->IPv6 设置 ->DHCPv6 模式將其改為有狀態.
然後保存並應用
然後回到網絡 -> 接口,將 LAN 獲取的 IP block 添加到 /etc/bird6.conf
的 NA
裡,然後重啟 bird6, 大功告成,你的子級設備可以通過 dhcp 獲取一個 ipv6 以及一個 / 60 的 block 給它的子級設備分配.
要发表评论,您必须先登录。