阿里云服務(wù)器如何設(shè)置IPV6通過appstore的審核
蘋果上架要求:要求支持IPV6only(因為阿里云主機沒有IPV6only)
確認IPV6是否開啟:
方式1:使用ifconfig查看自己的IP地址是否含有IPv6地址。
方式2.查看服務(wù)監(jiān)聽的IP中是否有IPv6格式的地址。(netstat -tuln)
開啟IPV6:
vim /etc/sysctl.conf
vim /etc/modprobe.d/disable_ipv6.conf
vim /etc/sysconfig/network
至此ipv6的服務(wù)器端支持已經(jīng)完成,重啟服務(wù)器測試是否支持ipv6,重啟后, ifconfig查看ipv6的信息,有看到有關(guān)IPV6的輸出就可以
添加ipv6隧道:
1. 注冊Tunnel broker
https://www.tunnelbroker.net/
注冊很容易,就不講了,注冊需要郵箱驗證,,gmail、163能收得到認證郵件,qq還是一樣收不到
2.創(chuàng)建通道“Create Regular Tunnel”
填寫云服務(wù)器ip以及選擇默認的隧道節(jié)點,點擊Create Tunnel創(chuàng)建。填寫ip都,如果出現(xiàn)“IP is a potential tunnel endpoint.”則證明可以添加ipv6隧道,一般隧道節(jié)點系統(tǒng)已經(jīng)默認分配,可以手動選擇,大家可以在自己的云服務(wù)器上分別ping一下這些ip,選時延低的。
3.創(chuàng)建ipv6隧道及路由
到下一頁面切換到Example configurations選項卡,如果你的VPS是centOS/Debian這些常見Linux的話,下拉菜單選擇Linux-route2,出現(xiàn)了設(shè)置的命令,復(fù)制到自己的云服務(wù)器上運行。
4.測試ipv6
添加ipv6的dns服務(wù)器,在最后添加nameserver 2001:4860:4860::8888,nameserver 2001:4860:4860::8844谷歌的ipv6 dns服務(wù)器
# 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 bytes 64 bytes from tsa03s01-in-x0e.1e100.net: icmp_seq=1 ttl=55 time=25.5 ms 64 bytes from tsa03s01-in-x0e.1e100.net: icmp_seq=2 ttl=55 time=25.5 ms 64 bytes from tsa03s01-in-x0e.1e100.net: icmp_seq=3 ttl=55 time=33.1 ms 64 bytes from tsa03s01-in-x0e.1e100.net: icmp_seq=4 ttl=55 time=25.5 ms 64 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
阿里云服務(wù)配置
代理配置好之后服務(wù)器中執(zhí)行ifconfig命令,找到he-ipv6虛擬網(wǎng)卡,找到scope為Global 的ipv6地址,在阿里云后臺配置AAAA記錄為上面提到的ipv6地址
在線測試:https://zh.infobyip.com/ping-ipv6.google.com-ipv6.html
適配IPv6遇到的坑,終極解決方案
http://blog.csdn.net/u010069091/article/details/51915179
6.1AppStore發(fā)布之后的應(yīng)用要兼容IPv6。
然而我上個星期發(fā)布的版本并沒有因為沒兼容而被拒,這次提交卻遇到IPv6兼容問題。。。
話不多說,上代碼:
+(NSString *) getIPWithHostName:(const NSString *)hostName
{
struct addrinfo * result;
struct addrinfo * res;
char ipv4[128];
char ipv6[128];
int error;
BOOL IS_IPV6 = FALSE;
bzero(&ipv4, sizeof(ipv4));
bzero(&ipv4, sizeof(ipv6));
error = getaddrinfo([hostName UTF8String], NULL, NULL, &result);
if(error != 0) {
NSLog(@"error in getaddrinfo:%d", error);
return nil;
}
for(res = result; res!=NULL; res = res->ai_next) {
char hostname[1025] = "";
error = getnameinfo(res->ai_addr, res->ai_addrlen, hostname, 1025, NULL, 0, 0);
if(error != 0) {
NSLog(@"error in getnameifno: %s", gai_strerror(error));
continue;
}
else {
switch (res->ai_addr->sa_family) {
case AF_INET:
memcpy(ipv4, hostname, 128);
break;
case AF_INET6:
memcpy(ipv6, hostname, 128);
IS_IPV6 = TRUE;
default:
break;
}
NSLog(@"hostname: %s ", hostname);
}
}
freeaddrinfo(result);
if(IS_IPV6 == TRUE) return [NSString stringWithUTF8String:ipv6];
return [NSString stringWithUTF8String:ipv4];
}
這段代碼即判斷了是否IPv6環(huán)境并解析域名獲得了IP地址。
測試
首先得配置IPv6網(wǎng)絡(luò)環(huán)境,至于如何配置,自行百度"如何搭建IPv6的測試環(huán)境"。
然而配置成功后,用手機連接的WiFi DNS也是正確的,運行程序測試怎么不成功呢,找了好多資料,猜測是DNS解析出了問題。
那就換另一種方法配置IPv6:拔掉網(wǎng)線,用mac連接WiFi(沒有WiFi可以用手機流量分享熱點),然后在共享中用前一種方法配置IPv6(不知道具體是共享到電腦那個端口,索性全點上),記得選中"創(chuàng)建NAT64 網(wǎng)絡(luò)"。這時直接通過模擬器測試succeed!
測試成功了。你以為就沒問題了?這里提交依然可能被拒,手機和 Mac 之間是 IPv6 沒錯,但 Mac 和你的服務(wù)器之間還是 IPv4 連接。
如果這項測試通過,可以說明:你的客戶端應(yīng)用在 IPv6 網(wǎng)絡(luò)下,是(基本)沒有問題的,但是無法驗證你的服務(wù)器能夠?qū)?IPv6 網(wǎng)絡(luò)做出正確的響應(yīng)。然而,蘋果審核的時候,卻是要去 DNS 服務(wù)器詢問你的服務(wù)器的 IPv6 地址,然后進行訪問。如果查詢不到 IPv6 地址,可能會進而詢問 IPv4 地址,然后進行轉(zhuǎn)換使用。蘋果明確表示服務(wù)器不需要支持 IPv6,但是有一點蘋果沒有指出來,那就是,雖然你的服務(wù)器不用支持 IPv6,但是必須正確響應(yīng) IPv6 的 DNS 查詢。
如何驗證呢??使用以下命令即可:
如果返回的 status 為 NOERROR, 那基本就沒什么問題,但是一定要在多個網(wǎng)絡(luò)環(huán)境下測試都通過才行。如果返回的是其他的響應(yīng),尤其是 SERVFAIL 的情況,那就基本杯具了。由于你已經(jīng)驗證了客戶端沒有問題,現(xiàn)在要做的,就是催著你的運維、后臺啥的,趕緊去改 DNS 配置,直到穩(wěn)定返回 NOERROR 為止。
其他參考:http://blog.csdn.net/nil_lu/article/details/53809893一、獲取HTTPS安全證書
在操作之前,請將你的域名的隱私保護去掉,讓證書服務(wù)商能通過域名解析查看到域名管理者的郵箱,否則驗證證書時會無法進行。
登錄阿里云管理控制臺,【云盾】菜單選擇【證書服務(wù)】
選擇購買證書
在購買頁面,選擇WoSign,沃通,免費版,多個域名,域名個數(shù)5個,1年。
目前沃通停了免費的證書服務(wù),只有賽門鐵克支持,大家按著沃通的方式來做吧,賽門鐵克的流程我就不貼了。
一幫商人!其實對于一個小網(wǎng)站來說,阿里應(yīng)該跟騰訊一樣,來個免費的證書服務(wù),而不是通過接入第三方把這個小錢賺了
確認訂單,支付,
付款完成后,到我的訂單里,可以看到剛剛買的服務(wù),點擊【信息補全】按鈕,將你的網(wǎng)站地址輸入,一般輸入一個不帶www.的和一個帶www.的兩個域名。
如果你進入的是詳情頁就到你郵箱中看看阿里云給你發(fā)的郵件(郵箱是阿里云注冊時用的郵箱)
如果直接進入沃通網(wǎng)站進行信息補全就是這個界面:選擇【驗證域名所有權(quán)(待完成)】
需要發(fā)送郵件到郵箱獲取驗證碼,我的主機在購買時,送了我一個企業(yè)郵箱,所以就直接用域名對應(yīng)的郵箱了,如果你沒有域名郵箱,建議將域名保護關(guān)閉,然后再驗證。當然,你還可以通過域名解析的方式處理。
如果能通過郵件獲取驗證碼,基本上,當時就可以下發(fā)證書。回到阿里云證書服務(wù),可以看到訂單狀態(tài)。在我的證書標簽頁,如果看到申請的證書,就說明可以使用了。
對于已簽發(fā)的證書,我們就可以下載,下載后解壓得到兩個文件,一個key結(jié)尾,是私鑰,一個pem結(jié)尾,是公鑰。
二、配置HTTPS證書
到阿里云管理控制臺【CDN】的【CDN域名列表中】,添加一個新的域名,選擇圖片小文件加速,類型IP,然后將阿里云虛擬主機的IP輸入。端口一定選擇80,不要選擇443
添加完成后,我們進行管理,開啟證書狀態(tài),將剛才的pem結(jié)尾的公鑰用文本編輯器打開,拷貝內(nèi)容,粘貼到【證書內(nèi)容】中。將私鑰拷貝,粘貼到私鑰中。
注意:公鑰的內(nèi)容中-----END CERTIFICATE-----
和-----BEGIN CERTIFICATE-----
之間是有空行的,需要將空行去掉
- 1
- 2
- 3
- 4
- 5
改成
- 1
- 2
- 3
- 4
另外需要將跳轉(zhuǎn)類型設(shè)置為HTTP->HTTPS
另外需要記住CNAME: CNAME: www.aitongyi.com.w.cab.com
因為下一步我們需要到域名管理控制臺去修改網(wǎng)站的域名綁定信息。
CDN的基本信息配置完成后,我們需要解析緩存配置,就是告訴CDN,緩存那些內(nèi)容。
如果是阿里的免費虛擬主機,除了將html、css、js、png、jpg、ico等文件緩存外,一般會將整個css或者js目錄緩存,因為有的js文件未來便于處理,都是用.jsv1.0.0
來做結(jié)尾,避免js文件更新后無法獲取最新版本。
由于我是Hexo生成的靜態(tài)網(wǎng)站,所以可以將整個網(wǎng)站目錄進行緩存。
三、域名綁定
在阿里云管理控制臺中【域名】的【域名列表】點擊域名的【管理】按鈕,進入域名管理控制臺。將原來的記錄類型【A】,主機記錄為www
的解析修改一個為CNAME記錄類型,將記錄值修改為剛才的www.aitongyi.com.w.cab.com
這個地址,保存即可。
下一步我就就是在瀏覽器中輸入:www.aitongyi.com
,網(wǎng)站就會自動跳轉(zhuǎn)到https://www.aitongyi.com/
大功告成!
如果你的網(wǎng)站沒有跳轉(zhuǎn)到https或者網(wǎng)站請求沒有反應(yīng),請等待10分鐘左右,一般是設(shè)置沒有及時生效導(dǎo)致的。