運營商級 NAT 內使用 Tunnelbroker

在學校裡想用 IPv6,但是學校沒給分發。於是就決定使用 Hurricane Electric 的 Tunnel Broker。不好說學校防火牆有沒有堵掉 protocol 41,也就是 6in4。但至少學校的 IPv4 出口不接受 ICMP。

然後 Tunnel Broker 就不開心了。說是必須要允許來自它的 ICMP,才能設定 IPv4 端點。那能怎麼辦,我也很無奈啊。那就只好從別的地方用什麼手段「中繼」一下了吧。

原本是想用 Digital Ocean 的,學校內連線它美國東部的資料中心只有 7 毫秒左右的延時。可是 Tunnel Broker 還是不高興。說這 IP 段在黑名單裡。就很生氣。換了另外一臺在美國中部的機子,成功建立端點。

一開始想的方案是通過 OpenVPN IP 隧道。因為,只要好好做轉發,就算端點在 NAT 後面也是沒有問題的。現實總是不太美好,總之,隧道內的隧道無法建立。去 superuser 題了個問,有人說「 IPv6 does not have fragmentation like IPv4 does, so shrinking the MTU with tunnels in tunnels could cause other problems. IPv6 also has a minimum MTU of 1280」。看了看自己 MTU 明明是 1500 —— 可能還有別的什麼玄學,總之這個方案被拋棄了。

然後就會想到直接用 OpenVPN 分發 IPv6 了,對吧?可是奈特使用的路由器,也就是之前提到的 MikroTIk 的路由器,上面的 OpenVPN 實現不支援 IPv6。

嗯 —— 那,放棄了?

當然不行。都研究了這麼多了。雖然路由器上面的 OpenVPN 不直接支援 v6,但是我們可以直接用 tap 隧道呀。tap 隧道的話就相當於 ethernet 了,好比兩張網卡用線連起來一樣。是執行在 Layer 2 上的。所以啥協議都能往上面套。

在伺服器直接分發估計也行,不過奈特傾向於在路由器這邊做。總之,無論怎麼做,先從 Tunnel Broker 申請一段 /48 的 IPv6 塊。然後,從裡面隨便選一塊 /64 出來。路由到 tap 介面的 link-local 地址上。也就是說:

ip -6 route add <your /64 zone>::/64 via fe80::...

然後回路由器來,在上面把 IPv6 路由到 tun 隧道的 IPv6 link-local 上。在 MikroTik 裡的話:

/ipv6 route add dst-address=2000::/3 gateway=fe80::...4%ovpn-tunnel

然後就搞定了。接下來就是區域網裝置的地址分配,不想在隧道伺服器那邊做,所以就在本地 LAN 橋上新增剛才路由到這兒的區域的地址塊,並且廣播:

/ipv6 address add address=<your /64 zone> interface=bridge advertise=yes

然後就:

IPv6 測試成功

IPv6 測試成功

好了。就這樣。

發表迴響

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