1. 程式人生 > >阿里雲伺服器以及CDN支援IPV6的方法

阿里雲伺服器以及CDN支援IPV6的方法

自從AppStore要求必須支援IPv6後,國民感到震驚的同時,也加速了國內的ipv6的普及。 但是國內的伺服器託管商(比如阿里雲)幾乎都不支援IPv6。
本文是博主金亞大王嘔心瀝血的填坑之旅,親測可行,完美支援IPv6

關鍵詞: 阿里雲,ECS, IPV6, CDN,IPV6隧道

廢話不多說,說說我是怎麼解決的。

思路:
資料互動層 建立IPv6隧道到伺服器
靜態CDN 需要使用國外的DNS來CNAME

1,阿里雲伺服器配置

CentOS 7.3 專有網路(經典網路也沒關係)

修改配置

編輯 vim /etc/modprobe.d/disable_ipv6.conf 檔案(需要root許可權)
disable 設定成 0

options ipv6 disable=0

編輯 vim /etc/sysconfig/network 檔案(需要root許可權)
NETWORKING_IPV6 設定成 yes

NETWORKING_IPV6=yes

然後執行 service network restart 重啟

編輯 /etc/sysctl.conf 檔案(需要root許可權)

net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0

再執行 sysctl -p 的命令,啟用IPv6 (需要root許可權)

開啟IPv6

使用 ip addr 檢視是否已經有 inet6 的地址,如果有說明已經開啟ipv6

[work@xxx tmp]$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:16:3e:30:58:e6 brd ff:ff:ff:ff:ff:ff inet 172.17.252.95/20 brd 172.17.255.255 scope global dynamic eth0 valid_lft 31454018sec preferred_lft 31454018sec inet6 fe80::216:3eff:fe30:xxxx/64 scope link valid_lft forever preferred_lft forever

其他

如果有Nginx 服務,需要監聽 IPv6的地址
如下所示,加個 listen [::]:80 ipv6only=on; 即可(如果出現不支援,或者nginx版本太低,可能沒有加入ipv6的支援,需要重新編譯 –with-ipv6 的版本)

server {
    listen       80;
    listen [::]:80 ipv6only=on;
    server_name  www.xxx.com;
    index index.php;
    ...

使用 netstat -tuln 來檢視是否用 tcp6 ::80的監聽,如果有則說名監聽成功
類似這種

tcp6       0      0 xxx:xxx:23:11f6::2:80  :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN
tcp6       0      0 :::443                  :::*                    LISTEN

如果沒有netstat,安裝一下 sudo yum install net-tools -y

2. IPv6隧道配置

https://tunnelbroker.net/ 網站申請一個tunnel
(有人說qq郵箱收不到驗證郵件,建議使用Gmail)
註冊步驟就不說了,註冊後需要驗證郵箱,然後登陸

建立Tunnel

IPv4 Endpoint 需要些伺服器的外網IP地址,也就是用這個IP能訪問到你的服務。

這裡寫圖片描述

檢視Tunnel資訊

這裡寫圖片描述
紅框裡面的 Client IPv6 Address 就是你的IPv6 地址,之後解析域名的時候用的就是它(域名裡不用寫“/64”)哦~

配置資訊

這裡寫圖片描述

注意這裡的 local ip需要寫內網IP,下面的NOTE: 已經用英文說明了

然後把這一坨命令直接在伺服器上執行就行了(注意需要root許可權)

測試 ping6 he.net

[[email protected] tmp]$ ping6 he.net
PING he.net(he.net (2001:470:0:76::2)) 56 data bytes
64 bytes from he.net (2001:470:0:76::2): icmp_seq=1 ttl=58 time=432 ms
64 bytes from he.net (2001:470:0:76::2): icmp_seq=2 ttl=58 time=435 ms
64 bytes from he.net (2001:470:0:76::2): icmp_seq=3 ttl=58 time=441 ms
64 bytes from he.net (2001:470:0:76::2): icmp_seq=4 ttl=58 time=429 ms
^C

能ping通說明已經配置成功。

接下來只需要在DNS解析裡面,將域名指向ipv6的地址即可,需要用AAAA記錄
AAAA xxxx 2001:xxxxx
解析之後可以用 wget -6 http://xxxxxxx 來驗證你的解析是否正確以及IPv6是否ok。如果能獲取到網頁資訊,說明一切正常。(https同理)

3. 配置靜態服務

靜態伺服器一般都有自帶的CDN啥的,這些都ok,只是需要一個支援IPv6的域名CNAME到你自己的CDN就行了。
國內的DNS不要想了,基本都沒法用,我這裡用的國外的 cloudflare免費版
https://www.cloudflare.com

首先先用郵箱註冊一個賬號。

新增網站

然後新增網站。只需要寫 xxx.com就行了,不需要二級域名

這裡寫圖片描述

點選scan

然後他會有40多秒的時間去掃面此域名的DNS解析,同時會給你播放一個動畫片

檢視DNS解析

掃描結果頁面一般都是空的,直接點 CONTINUE 繼續就可以了

這裡寫圖片描述

這裡會讓你選平臺,當然是免費的

這裡寫圖片描述

移交 DNS 解析

這裡要注意了,是要把域名的DNS解析交接到 Cloudflare上面。

需要到你的域名運營商那裡,設定域名的 DNS 【管理】
!!【重要】一旦將 DNS【管理】 修改到 cloudflare上面後,原來域名的所有解析將失效!!
所以不建議用原來的域名,建議新申請個域名來做這個事兒。

這裡寫圖片描述

設定完解析後,點選CONTINUE
Cloudflare會去嘗試接管此域名,
有可能會提示 解析失敗,需要點選retry來重新檢測

Status:Active 說明解析成功,這時候Cloudflare就可以解析你的DNS域名了

這裡寫圖片描述

然後你需要在你的CDN服務商建立一個新的域名,然後將Cloudflare新增你自己的域名CNAME到你的新CDN域名即可

使用wget -6 http://xxxxx.png 來測試靜態資源是否支援ipv6

ipv6-test

http://ipv6-test.com/validate.php 測試結果如下
這裡寫圖片描述

備註:
所有的wget -6 需要在支援ipv6的機器上使用,比如你上面配置好的IPv6的伺服器。

如果只是為了給蘋果稽核用,可能需要在程式碼裡針對IPv6地址做特殊處理,比如IPv6地址訪問的時候,需要返回IPv6的CDN地址。所以建議在返回的通用方法裡統一做一次“替換”,以無縫接入IPv6。

我們是給IPv6單獨部署了一臺伺服器,沒有在整體的負載均衡下面,具體的負載均衡下的IPv6設定,暫時還沒研究。