前言
因業務需求 公司APP需要在ios系統上運作需要改系統ipv6
2016年6月1号之後蘋果應用上傳AppStore稽核要求全面支援ipv6,雖然隻是一個簡單的稽核要求,但卻給中國區的開發者帶來了不小的麻煩,因為衆所周知的原因,國内的IPV6支援的比較差,是以包括ipv6環境測試在内的ipv6适配要求,着實是需要有一套解決方案。這裡都是廢話,下面就自己的解決方案開始做方案介紹。
代碼層支援
按照蘋果官方要求做iOS代碼适配ipv6,這裡涉及到了跟網絡相關的第三方庫的時候,按照我自己的經驗,做如下解釋:
1.Afnetworking ~3.1.0。(3.0.x版本正常都是支援ipv6的)
2.SDWebImage ~3.8.1。
基本的代碼層根據蘋果官方的要求做配置就好。對于socket支援,由于最近上線的項目裡沒有用到socket,需要做socket層支援的自己去蘋果官方查适配ipv6要求。
伺服器支援
1.給域名添加一條AAAA解析(當您希望通路者通過
IPv6位址 通路您的域名時,可以使用AAAA記錄,即用來指定網站域名對應的IPv6位址記錄),如果是www的域名,則AAAA解析名為www,值為目前域名的ipv6DNS位址。詳情: 阿裡萬網IPV6AAAA解析。
2.更改伺服器ipv6配置,這裡想說明一下,這次的蘋果強制要求ipv6相容,阿裡雲無辜背了黑鍋,其實能不能稽核通過或者說ipv6環境下阿裡雲能不能通路跟阿裡雲支不支援ipv6沒有一毛錢關系。用阿裡雲而ipv6稽核沒有通過的原因是伺服器環境沒有配置ipv6,或者根本就是有的伺服器為了節省性能将ipv6直接給禁掉了。是以檢視伺服器中ipv6的配置,看是否允許ipv6。
蘋果上架要求:要求支援IPV6only(因為阿裡雲主機沒有IPV6only)
确認IPV6是否開啟:
登入阿裡雲伺服器終端,進入/etc/modprobe.d/ipv6off.conf(不同的伺服器這裡命名可能會有差别,可以先到這個目錄看一下跟ipv6相關的配置檔案,然後再vim打開)
aliasnet-pf-10off 将本行注掉
optionsipv6 disable=1 改為 optionsipv6 disable=0
2.# vi /etc/sysconfig/network
NETWORKING_IPV6=no 改為 NETWORKING_IPV6=yes
3.# vi /etc/sysconfig/network-scripts/ifcfg-eth0
IPV6INIT=no 改為 IPV6INIT=yes
IPV6_AUTOCONF=no 改為 IPV6_AUTOCONF=yes
https://s3.51cto.com/wyfs02/M02/9E/41/wKioL1mOcszxt4-uAAAKyaCzZrg062.png4以上已經開啟ipv6,是以要進行一下安全設定,設定開機自啟動ipv6防火牆
# chkconfig ip6tables on
至此,ipv6的伺服器端支援已經完成,重新開機伺服器測試ipv6是否已經支援,重新開機後:
# lsmod | grep ipv6 如果有輸出則已經支援ipv6
輸入ifconfig檢視ipv6的資訊
# ifconfig | grep -i inet6
方式1:使用ifconfig檢視自己的IP位址是否含有IPv6位址。
https://s4.51cto.com/wyfs02/M02/9E/43/wKioL1mOqXLx7MlwAABVkWuLexQ507.png-wh_500x0-wm_3-wmp_4-s_3569122982.png方式2.檢視服務監聽的IP中是否有IPv6格式的位址。(netstat -tuln)
開啟IPV6:
vim /etc/sysctl.conf
vim /etc/modprobe.d/disable_ipv6.conf
vim /etc/sysconfig/network
至此ipv6的伺服器端支援已經完成,重新開機伺服器測試是否支援ipv6,重新開機後, ifconfig檢視ipv6的資訊,有看到有關IPV6的輸出就可以
此處以阿裡雲為例進行說明:
注意!
首先,到
https://www.tunnelbroker.net/注冊一個賬戶,然後登陸,戳
Create Regular Tunnel。IPv4 Endpoint (Your side) 這裡填你 ECS 的内網 IP 位址, Available Tunnel Servers 這裡選一個,一般來說 HK 離大陸近延遲低,不過最近 HE.net 的香港似乎都是繞了一圈美國回來的,是以延遲反而很高,這個看自己情況選就好。然後戳 Create Tunnel ,就完成了。
之後點選
添加自己的内網ip如:65.11.12.13
如圖所示:
1.添加内網位址選項服務:
2.點選建立即可:
https://s1.51cto.com/wyfs02/M02/9E/54/wKiom1mOqEijxL2RAACY5U-tU9Y587.png-wh_500x0-wm_3-wmp_4-s_4052711013.png3.複制粘貼以上指令
4.測試ipv6
添加ipv6的dns伺服器,在最後添加nameserver 2001:4860:4860::8888,nameserver 2001:4860:4860::8844谷歌的ipv6 dns伺服器
# vim /etc/resolv.conf
options timeout:1 attempts:1 rotate
nameserver x.x.x.x
nameserver x.x.x.x
nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844
# ping6 -c 5 ipv6.google.com
PING ipv6.google.com(tsa03s01-in-x0e.1e100.net) 56 data bytes64 bytes from tsa03s01-in-x0e.1e100.net: icmp_seq=1 ttl=55 time=25.5 ms64 bytes from tsa03s01-in-x0e.1e100.net: icmp_seq=2 ttl=55 time=25.5 ms64 bytes from tsa03s01-in-x0e.1e100.net: icmp_seq=3 ttl=55 time=33.1 ms64 bytes from tsa03s01-in-x0e.1e100.net: icmp_seq=4 ttl=55 time=25.5 ms64 bytes from tsa03s01-in-x0e.1e100.net: icmp_seq=5 ttl=55 time=25.4 ms--- ipv6.google.com ping statistics ---5 packets transmitted, 5 received, 0% packet loss, time 4031ms
rtt min/avg/max/mdev = 25.473/27.040/33.180/3.073 ms
注意:上例xxx.xxx.xxx.xxx位址是阿裡雲的内部IP
5)代碼到伺服器執行(如果想開機自動執行,可以修改/etc/init.d/network,把粘貼的代碼加到start中)
四、 解析AAAA到(請到您的域名提供商背景做相應操作)
阿裡雲是支援這種解析的,但dns會報錯,經測不影響appstore稽核,ipv6的位址就是上一步中申請的ip 2006:781:48:555::2
注意去掉ip位址末尾的”/64”
https://s2.51cto.com/wyfs02/M01/9E/6B/wKiom1mQ-YfStPLCAACb-VxycNI821.png五、 nginx監聽ipv6
編輯/etc/nginx/conf.d/default.conf,将server段的listen語句修改如下
listen 80;
listen [::]:80 ipv6only=on;
六、
測試方法1.
http://ipv6-test.com/validate.php在這個網址中輸入你的域名就可以了,隻要下面兩項可以過就可以送出app稽核了
https://s4.51cto.com/wyfs02/M02/9E/6B/wKiom1mQ-sGD8BTvAAAnQ74uTdw752.png如圖所示全部通過
方法2.
http://www.subnetonline.com/pages/network-tools/online-port-scanner.php詳情參考
阿裡雲:
通用 CentOS 伺服器安全配置指南騰訊雲:
在centos伺服器上啟用ipv6位址騰訊:
centos作業系統雲主機開啟ipv6方法