雖然 IPv6 有著幾乎無止盡的位置可以用,但是在某些情況下,NAT 還是必要的,像是以下情境:
- 要用 NAT 當作防火牆阻擋外面連線進入
- 機房/ ISP 很機車,就是不多給你幾個 IPv6
參考了一下資料,發現設定起來也很簡單,大致上分為以下步驟:
- 先讓機器可以連上 IPv6 網路
- 準備一段 Unique Local Address (RFC 4193),並把對內 Interface 的位置設定上去
- 使用 ip6tables 設定 NAT
- 使用 radvd 做 Routing Advertisement
第四步應該也可以用 DHCPv6 代替 Routing Advertisement ,但是目前沒有實作的必要所以跳過。
首先要讓機器連上 IPv6 網路,這個每個 ISP 、每個機房、每個環境都不一樣,請自己處理。設定後可以藉由 ping6 www.google.com
來檢查設定是否正確。
接著就像 IPv6 一樣,要準備一段虛擬 IP 。 IPv6 的虛擬 IP 範圍也很廣,只要是 fc00
開頭的,通通都是虛擬 IP (也可以稱為私有 IP)。呆呆翰這裡選擇 fc00:6861:6e00::/64
這個區段,並且把 fc00:6861:6e00::1
給負責 NAT 的路由器用。
決定好區段,就把 IP 設定上去你的介面卡。我的對內介面卡是 tap_vpn1
,所以指令長這樣:
ifconfig tap_vpn1 inet6 add fc00:6861:6e00::1/64
設定好區段,就可以把 NAT 功能打開,不過在那之前得先把 IPv6 的轉發功能打開:
sysctl -w net.ipv6.conf.all.forwarding=1
接著把 NAT 設定起來:
ip6tables -t nat -I POSTROUTING -s fc00:6861:6e00::/64 -j MASQUERADE
如果要確認 NAT 是否正確:
ip6tables -t nat -L
NAT 設定後,其實網路已經通了。不過手動指定 IP 、 閘道 、 DNS 非常麻煩,所以這裡把 radvd 裝起來並且設定:
apt-get install radvd
接著把 radvd 的設定檔 /etc/radvd.conf 寫好:
interface tap_vpn1
{
AdvSendAdvert on;
prefix fc00:6861:6e00::/64
{
};
};
重新啟動 radvd:
systemctl restart radvd
確認 radvd 正常運作:
systemctl status radvd -l
確認 Client 正常運作:
搞定收工。
參考資料:
https://blog.blahgeek.com/2014/02/22/openwrt-ipv6-nat/
http://www.lijyyh.com/2011/11/ipv6_16.html
Thanks a lot.