今年(2024)早些時候,Amazon AWS開始對所有的固定IP (IPv4)收費,一個月一個IP 要收$6,比我用的Amazon Elastic Compute Cloud (EC2)都貴了。由於我只是架設私人使用的一些雲端服務,這筆費用能省就省。為了能完全擺脫IPv4,著實花了不少時間修改設定,包含DNS、強制EC2不獲取 public IPv4 (是的,就算是系統指派給你的外部IP,只要是public IPv4,都是要收費的…)等等,
但是其中最頭痛的當屬如何讓我的伺服器能與純IPv4的伺服器溝通。例如,wordpress的官網(wordpress.org)就只有IPv4,所以我的這個個人網站就無法連上wordpress官網進行更新了。在查了無數的資料後,我找到了一個解決方案:Public NAT64 service。這是一個由個人提供的DNS64 + NAT64服務。他的網站是
目前有一些大公司有提供DNS64服務,例如google,這服務能讓IPv6的伺服器能夠”找到/看到”純IPv4的伺服器。但是如果一個純IPv6的伺服器想與純IPv4的伺服器提供的服務建立連結,那就會需要NAT64。上面的網站提供了多個DNS64+NAT64 的服務位址,還是免費的!我試用了之後,發現不但Wordpress的更新正常了,這些DNS64+NAT64的名稱伺服器 (name server)也能用在一些對純IPv6伺服器不支援的服務上。例如Amazon Web Services (AWS) 提供的Amazon Simple Email Service (SES)。純IPv6的伺服器是無法與Amazon SES建立連結進而使用這項服務的。
以我自己的理解,DNS64服務可以幫助純IPv6伺服器查詢到純IPv4的位址 (一般DNS無法做到),NAT64則是能在得知這個IPv4位址後,與其建立連結,交換資訊。所以如果需要與只提供IPv4的伺服器建立連結 (例如瀏覽網頁),那這兩者缺一不可。如果想要了解更多信息,可以參考 https://docs.aws.amazon.com/zh_tw/vpc/latest/userguide/nat-gateway-nat64-dns64.html
下面我把我的操作流程分享給大家,我用的是AWS的Ubuntu,所以會以這個舉例,如果你用的是其他服務,可能會有差異,不過重點就是指定你的伺服器使用上面這網站提供的DNS64+NAT64的名稱伺服器。
為了取代ubuntu原本的DNS設定,你要先到 /etc/netplan裡
cd /etc/netplan
我沒有任何檔案在這資料夾中,所以我要新增一個檔案
sudo vi 99-custom-dns.yaml
在檔案中寫入下面的內容:
network:
version: 2
ethernets:
eth0:
nameservers:
addresses: [2a01:4f8:c2c:123f::1, 2a00:1098:2c::1]
dhcp4-overrides:
use-dns: false
這裡的eth0是你的網卡代號,如果你只有一張網卡,大概也是eth0,不過請照你的實際情況修改。我這裡只放了兩個名稱伺服器,你想要多放也是可以的。
接下來請執行下面的指令來把這些設定寫入並覆蓋原本的DNS設定。
sudo netplan generate
這時請重啟你的服務器來讓設定生效
sudo reboot
這時可以用下面指令來查看設定是否生效,一樣記得把eth0改成你的網卡的代號
sudo resolvectl status eth0
如果你能找到像下面這樣的描述,就是成功了
Current DNS Server: 2a01:4f8:c2c:123f::1
最後要感謝一下網路上這些願意免費提供服務的好心人!
參考資料:
https://docs.aws.amazon.com/zh_tw/vpc/latest/userguide/nat-gateway-nat64-dns64.html
https://repost.aws/knowledge-center/ec2-static-dns-ubuntu-debian