轉載https://blog.csdn.net/ei__nino/article/details/71331717
自從AppStore要求必須支持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
1編輯 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的
開啓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
[work@iz2ze4p8dzdjgu7fh60vqcz 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
能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設置,暫時還沒研究。