Quantcast
Channel: Hiraku Dev
Viewing all articles
Browse latest Browse all 241

在 Oracle Cloud 伺服器新增 IPv6 tunnel 並讓行動網路支援 IKEv2 VPN

$
0
0

之前按照了 jkgtw 大大的教學,在我自己的 VPS server,跟 Oracle Cloud 上面架設了 IKEv2 的 VPN 。但一直以來有一個詭異的事情:我的 VPS 可以用行動網路連上 VPN,但是 Oracle Cloud VPN 用行動網路卻連不上,只能用 WiFi。

查了一下原因,最後發現原來是我用的行動網路會給 IPv6 地址,但是 Oracle Cloud 預設是沒有 IPv6 地址的!所以 IKEv2 使用行動網路會連線失敗。因此,這篇文章就來教學,如何在 Oracle Cloud 使用 6to4 tunnel 加入 IPv6 地址。

因為我用的是 Ubuntu 20.04 LTS,預設網路管理已經改用 netplan 而不是 ifupdown 了,所以以下會用 netplan 來當範例。

開始之前,如果你沒設定過 root 密碼,先務必把 root 密碼改掉,因為如果網路連線錯誤進不去 SSH,從 Oracle 後台進去會問密碼,不知道密碼就糗了。Oracle Cloud 預設會對 Ubuntu 做一些雞婆的 iptables 規則,如果要關掉可以參考這篇

 

▼ 先到 Oracle Cloud 的防火牆設定頁面,把 ICMP 的設定刪掉,另外再開一個 IPv6 的規則。

 

▼ 再來到 https://tunnelbroker.net/ 開一隻帳號,完成之後點「Create Regular Tunnel」,Endpoint 輸入你 VPS 的公開 IP,然後在右邊選擇 server

 

▼ 等待 tunnel 創建完畢,選擇「Example Configuration」,再選擇「Netplan (Linux)」,把 local 改成 10.0.0.x 這樣的本地 IP。本地 IP 如何看呢?在 Oracle Cloud 選擇「執行處理」,找 VNIC 下面的專用 IP 位址就是了。

 

address 那個欄位是你的 IPv6 地址,請複製在 /64 前面的那一段位址,等一下會用到。

接著在 VPS 上,新增 /etc/netplan/99-he-tunnel.yaml 檔案,內容如上複製過去,記得換掉 local IP,存檔後輸入 sudo netplan apply 以套用設定。再輸入 ping6 -c 1 ipv6.google.com 看能不能 ping 到 google 的 IPv6 伺服器,可以的話就設定完成了。

還記得我們剛剛刪除 ICMP 規則嗎?現在我們設定完成了,如果你有需要的話,可以把這兩個規則加回去了。

最後最後,這個步驟非常重要,很多人沒有寫到。經過我的實測,IPv6 tunnel 如果一陣子沒有使用的話會被關掉,重開機的情形下也不會預設直接開啟。所以我們新增一個 cronjob(終端機輸入 crontab -e 編輯,新增一行)

*/5 * * * * ping6 -c1 ipv6.google.com > /dev/null

讓系統去每 5 分鐘 ping 一下 Google 的 IPv6 地址,讓 tunnel 不會自動關掉,這樣就好了!

 

以上是 IPv6 的部份,接下來要講的是如何套用在我們的 IKEv2 設定檔裡面。如果你的 IKEv2 設定裡面,VPN 伺服器地址是已經綁好 domain 的話,那很簡單,去新增一個 AAAA record,然後輸入剛剛的 IPv6 地址,等待 DNS 設定更新完成,就可以了。

如果你的 IKEv2 是用 IPv4 作為伺服器連線地址的話,就要用電腦的文字編輯器打開設定檔(.mobileconfig)檔案。

大概長得像是這樣:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!-- Read more: https://wiki.strongswan.org/projects/strongswan/wiki/AppleIKEv2Profile -->
<plist version="1.0">
    <dict>
        <!-- 前面不重要,省略 -->
        <key>PayloadContent</key>
        <array>
            <dict>
                <!-- 前面不重要,省略 -->
                <key>IKEv2</key>
                <dict>
                    <!-- Hostname or IP address of the VPN server -->
                    <key>RemoteAddress</key>
                    <string>123.456.000.123</string>
                    <!-- Remote identity, can be a FQDN, a userFQDN, an IP or (theoretically) a certificate's subject DN. Can't be empty.
                     IMPORTANT: DNs are currently not handled correctly, they are always sent as identities of type FQDN -->
                    <key>RemoteIdentifier</key>
                    <string>123.456.000.123</string>
                    <!-- Local IKE identity, same restrictions as above. If it is empty the client's IP address will be used -->
                    <key>LocalIdentifier</key>
                    <string></string>
                    <!-- 中間不重要,省略 -->
                    <string>SharedSecret</string>
                    <key>SharedSecret</key>
                    <string>5oOzIGRlY29kZSDlubnlmJvvvJ/lo57lo57vvIE=</string>
                    <!-- 後面不重要,省略 -->
                </dict>
            </dict>
        </array>
    </dict>
</plist>

這裡只有兩個重點:

  • RemoteIdentifier
  • SharedSecret

▼ 在 iPhone 新增一個 VPN,照下面填寫,注意認證那邊要選「無」,再關掉使用憑證,才會出現密鑰欄位。

在儲存設定之後,就可以使用行動網路連上 Oracle Cloud 的 IKEv2 VPN 了。

 

這篇文章 在 Oracle Cloud 伺服器新增 IPv6 tunnel 並讓行動網路支援 IKEv2 VPN 最早出現於 Hiraku Dev


Viewing all articles
Browse latest Browse all 241

Trending Articles