Table of Contents
前言
最近申請了中華電信固定制的光世代
終於有可以上網的 IPv6
看了大部分網路上的教學,都是偏向 DHCP
or PPPoE
的 IPv6
覺得自己來寫一篇 OPNsense 固定制 IPv6 教學
希望把這篇記錄下來可以幫助那些跟我一樣
不喜歡那些家用的路由器
喜歡自己搞一個 HomeLab
比如我就是用 OPNsense 來負責我的對外網路
以後再來寫相關血淚史🤣
為什麼要用 IPv6
先看一下兩種主要的協定特點
IPv4
- 位址長度:IPv4 位址長度為 32 位元,通常以十進制表示,並以點分隔
- NAT:IPv4 網路常常使用 NAT 以允許多個主機共享單一公共 IPv4 位址
- 優先權:IPv4 並未內建對流量優先權的支援
IPv6
- 位址長度:IPv6 位址長度為 128 位元,以冒號分隔的八組十六進制數字表示
- NAT 不再需要:IPv6 不需要 NAT,因為它提供足夠的位址供每個設備直接連接到 Internet
- 自動配置:IPv6 內建支援 SLAAC(Stateless Address Autoconfiguration),使設備能夠自動配置 IPv6 位址
- 優先權和流量分類:IPv6 內建支援對流量的優先權和分類,有助於提高服務品質
雖然 IPv4 有這麼多 IP 位址,但依舊在 2011 年 的 2 月 3 日消耗殆盡。
節錄自 iThome
現在公共的 IPv4 已經是稀缺資源
對筆者來說,除了這個網誌
還有一些需要使用到固定 IP 的服務,未來有可能還需要擴展
畢竟不是企業,不太可能無上限一直增加
畢竟在台灣跟中華電信租用 IP 也不是太便宜的金額
好像沒有不用 IPv6 的理由
前置條件
還是要說一下一些前置條件
- 有租用來自 ISP(在台灣通常是中華電信)的固定 IPv6 位址
- 一台支持設定
IPv6
且能夠開啟DHCPv6
的路由器/防火牆,本文是使用OPNsense
- 一台有網路功能的電腦,可以是
PC
,Linux
,MAC
附圖是申請完,中華電信透過 Email 通知的信件的範例
OPNsense 固定制 IPv6 設定步驟
完成前置條件後,就可以開始設定
以下設定皆在 OPNsense 中完成
記得要先使用管理員帳號密碼登入
- System -> Gateways -> Single
因為主要是上網用的 Gateway,Upstream Gateway
需要勾選Monitor IP
主要給 OPNsense 去驗證這個 Gateway 是否斷線
我通常會輸入中華電信提供的2001:B000:168::1
也可以輸入 Google:2001:4860:4860::8888
or Cloudfare:2606:4700:4700::1111
- Interfaces -> [WAN] (依據你的 Internet interface 可能有所不同)
IPv6 Configuration Type
改成Static IPv6
並在Static IPv6 configuration
中輸入 IP(中華電信提供的 WAN PORT IPv6)IPv6 Upstream Gateway
則選擇剛剛第一步中新建的 GatewayUse IPv4 connectivity
不需要勾選
完成這兩步之後
回到 Lobby -> Dashboard
應該會看到 OPNsense 已經判定 Gateway 已經 Online
- 路由器可以透過 IPv6 上網後
接下來就是要設定區域網路中的 IPv6
意味著需要在 LAN 中開啟 DHCPv6
如果你直接到 Services -> DHCPv6,將會發現任何 LAN 的 Interface 都不存在
因為出現的前提是 LAN Interface 有一個內網的 IPv6
所以先來到 Interface -> LAN
同樣在 IPv6 中,改成 Static IPv6
但下方的 IPv6 Address 要輸入什麼呢?
- 如果你沒有要切網段,那可以直接使用中華電信提供的 LAN Port IPv6,並在
::
後方加入一個數字,通常是 1 or FFFF
這就會是你在區網可以直接訪問 OPNsense 的 IP - 或者你可以使用這個工具,輸入 LAN Port IPv6,中華電信給的 subnet 是 56,可以再將它切小一點,我是切成 64
切出來後任一組的其中一個 IP 都可以拿來作為 LAN 的 IP
因為是區域網路,在 Gateway 這邊,保持 Auto-detect
- 完成後,就可以在 Services -> DHCPv6 中發現剛剛設定完 Static IPv6 的 Interface 出現了
這個時候可以將剛剛切好的網段輸入到from to
記得要避開 LAN Interface 的 IP,以下圖來說
就是避開 1,範圍是 2~200
- 下面就是 IPv6 與 IPv4 最不相同的地方 Router Advertisements
全狀態位址自動配置(Stateful Address Auto-configuration):
這邊引用自 https://www.lijyyh.com/2012/04/ipv6ipv6-auto-configuration.html
在傳統的IPv4中,通常利用一種動態主機組態協定(Dynamic Host Configuration Protocol,DHCP) 來實現了自動配置網路主機的IP位址及相關組態設定(如:DNS伺服器、預設閘道器)。而IPv6可以 繼續延用此種自動配置的協定與服務,讓網路主機由DHCPv6伺服器自動取得128位元的IP位址和相關組態,此種讓主機可由伺服器取得介面位址和/或其它組態參數的自動定址方式稱為全狀態自動配置 ( Stateful Address Auto-configuration )。
無狀態位址自動配置(Stateless Address Auto-configuration):
SLAAC 是 IPv6 StateLess Address AutoConfiguration (無狀態位址自動設定) 的簡稱(RFC 2462、4862),所謂無狀態機制乃是指允許一部主機結合了本機可用資訊(介面識別碼)和從路由器公告取得的訊息(首碼)來產生自己的IP位址。換言之,當一部主機啟動IPv6時,送出多點傳送的路由器請求(Router Solicitation)、路由器回應以路由器公告(Router Advertisement)訊息來以讓主機從路由器得到首碼加上自己的介面識別碼,自動配置IPv6位址。
來到 Services -> Router Advertisements
因為我暫時沒有需要從 Router 這邊去管控發出去的 IP
這邊我選擇 Stateless
在細節一點可以查閱上面的文章
至此,已經完成大部分設定
可以驗證一下設備端可不可以正常取得 IPv6
這邊我使用 macOS
$ifconfig
...
...
en12: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=6467<RXCSUM,TXCSUM,VLAN_MTU,TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
ether 64:4b:f0:38:a5:23
inet6 fe80::442:fea8:74d0:4c32%en12 prefixlen 64 secured scopeid 0x1f
inet6 2001:xxxx:xxxx:801:853:d4f5:6fec:c914 prefixlen 64 autoconf secured
inet6 2001:xxxx:xxxx:801:9901:c129:ab0f:a40f prefixlen 64 autoconf temporary
inet 172.20.20.230 netmask 0xffffff00 broadcast 172.20.20.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect (1000baseT <full-duplex,flow-control>)
status: active
...
可以看到在 inet6
的部分有 2001 開頭的 IPv6,並且為 autoconf
接著來測試一下上網能力,來 ping google 吧
$ping6 2001:4860:4860::8888
PING6(56=40+8+8 bytes) 2001:b030:2049:801:9901:c129:ab0f:a40f --> 2001:4860:4860::8888
16 bytes from 2001:4860:4860::8888, icmp_seq=0 hlim=116 time=4.526 ms
16 bytes from 2001:4860:4860::8888, icmp_seq=1 hlim=116 time=3.394 ms
16 bytes from 2001:4860:4860::8888, icmp_seq=2 hlim=116 time=6.246 ms
16 bytes from 2001:4860:4860::8888, icmp_seq=3 hlim=116 time=3.401 ms
16 bytes from 2001:4860:4860::8888, icmp_seq=4 hlim=116 time=3.271 ms
16 bytes from 2001:4860:4860::8888, icmp_seq=5 hlim=116 time=3.606 ms
16 bytes from 2001:4860:4860::8888, icmp_seq=6 hlim=116 time=3.174 ms
通了!
防火牆設定
曾經我以為,既然有外網能力的 IPv6 都是 Public IP
這樣也太危險,不就常常被打爆
其實是我想錯了
如果是直接手動設定在設備端的固定 IPv6,確實就只有 OS 層的防火牆
但如果是透過 DHCPv6 取得的
那這個 IP 還是有受到防火牆保護,以本文來說就是 OPNsense
以下就來教學,如果是需要被訪問的,該如何開放
以這個網站來說,IPv6 是 2001:b030:2049:800:20c:29ff:fe81:fed3/64
來到 Firewall -> Rules -> WAN 並且新增一筆
可以設定成以下
- Action: Pass
- Interface: WAN
- Direction: in
- TCP/IP Version: IPv6
- Protocal: any
- Destination: Single host or Network,並輸入 IP
到這邊之後,你就可以試試看從外部訪問,已經可以通了
https://[2001:b030:2049:800:20c:29ff:fe81:fed3]/
網域管理
如果一切順利
剛剛的 IPv6 網址是通的
那一定會再得到一個疑問,這麼長一串
比 IPv4 的網址還要更難輸入
這樣會不會太搞死人了
但別擔心,網域服務商其實也有提供 IPv6 的
以筆者使用的 Godaddy 來說,是可以新增一筆 AAAA Record 的
如下圖
如果你的設備支持
那麼一樣可以反解出一組 IPv6
$ping6 blog.tocandraw.com
PING6(56=40+8+8 bytes) 2001:b030:2049:801:9901:c129:ab0f:a40f --> 2001:b030:2049:800:20c:29ff:fe81:fed3
16 bytes from 2001:b030:2049:800:20c:29ff:fe81:fed3, icmp_seq=0 hlim=63 time=0.380 ms
16 bytes from 2001:b030:2049:800:20c:29ff:fe81:fed3, icmp_seq=1 hlim=63 time=0.673 ms
16 bytes from 2001:b030:2049:800:20c:29ff:fe81:fed3, icmp_seq=2 hlim=63 time=0.596 ms
16 bytes from 2001:b030:2049:800:20c:29ff:fe81:fed3, icmp_seq=3 hlim=63 time=0.647 ms
16 bytes from 2001:b030:2049:800:20c:29ff:fe81:fed3, icmp_seq=4 hlim=63 time=0.683 ms
16 bytes from 2001:b030:2049:800:20c:29ff:fe81:fed3, icmp_seq=5 hlim=63 time=0.640 ms
16 bytes from 2001:b030:2049:800:20c:29ff:fe81:fed3, icmp_seq=6 hlim=63 time=0.613 ms
總結
這篇文章,沒有帶到深入的學問
再深入,我也沒辦法講得很透徹
主要還是記錄一下這個過程
因為一般使用者如果有一些篇專業的需求
又不想使用家用的路由器,購入商用的 CP 值也真的太低
相信 OPNsense, pfSense, OpwnWrt… 這類的使用者也不在少數
希望有幫助到根本篇一樣使用 OPNsense 的使用者
Cool