Debian Linux 設定 IPv6 NAT

雖然 IPv6 有著幾乎無止盡的位置可以用,但是在某些情況下,NAT 還是必要的,像是以下情境:

  • 要用 NAT 當作防火牆阻擋外面連線進入
  • 機房/ ISP 很機車,就是不多給你幾個 IPv6

參考了一下資料,發現設定起來也很簡單,大致上分為以下步驟:

  1. 先讓機器可以連上 IPv6 網路
  2. 準備一段 Unique Local Address (RFC 4193),並把對內 Interface 的位置設定上去
  3. 使用 ip6tables 設定 NAT
  4. 使用 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 正常運作:
Connect Status

ping ipv6

搞定收工。

參考資料:

https://blog.blahgeek.com/2014/02/22/openwrt-ipv6-nat/

http://www.lijyyh.com/2011/11/ipv6_16.html

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *