元旦期待已久的iOS版本,苦苦等到1.7号方值被拒了,原因是不支持ip6,现要改造支持ipv6,公司用的aliyun服务器 nginx做反向代理 服务器的操作系统是linux,通过ping6的方式可以之道网址是否支持ipv6
伦理片 http://www.dotdy.com/
- ping6 ipv6.xxxx.com
- ping6 ipv6的ip
- 请参考:http://lesca.me/archives/how-to-ping-ipv6-address.html
在gogole后国内大部分都是不支持ipv6,包括aliyun都是禁用状态,在google之后发现了破解之道
一.确认系统版本
- # cat /proc/version (Linux查看当前操作系统版本信息)
- Linux version 2.6.32-431.23.3.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Thu Jul 31 17:20:51 UTC 2014
- # uname -a (Linux查看版本当前操作系统内核信息
- Linux iZ28jhy70mhZ 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
二.linux支持ipv6
2.1.确认linux是否启用了ipv6通过以下命令,能看到ipv6的字样说明支持
- # lsmod | grep ipv6
- ipv6 318183 90 sit
- # ifconfig
- # ip a
- inet6 addr: fe80::216:6eff:xx:1bab/64 Scope:Link (inet6字样)
2.2配置启用ipv6
由于国内目前并不支持ipv6,阿里就索性把ipv6的模块给禁用了。可以在内核加载模块中看到禁用的文件:
- #cat /etc/modprobe.d/disable_ipv6.conf
- alias net-pf-10 off
- alias ipv6 off
- options ipv6 disable=1
并且在网络配置中,也看到了对ipv6的禁用:
- cat /etc/sysconfig/network
- NETWORKING=yes
- HOSTNAME=iZ28jhy70mhZ
- NETWORKING_IPV6=no
- PEERNTP=no
- GATEWAY=115.29.xxx.247
因此要开启ipv6的支持修改 /etc/sysconfig/network中的NETWORKING_IPV6=yes,并且注释掉/etc/modprobe.d/disable_ipv6.conf的内容或删除该文件。
2.3配置好以后重启阿里云服务器
- # shutdown -r now
三.Nginx支持ipv6
进入到nginx下,看是否有编译模块 --with-ipv6
- # cd /etc/nginx/sbin/
- # ./nginx -V
- nginx version: nginx/1.6.2
- built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
- TLS SNI support enabled
- configure arguments: --prefix=/etc/nginx --with-openssl=../openssl-1.0.1k --with-http_stub_status_module
- --with-http_ssl_module --with-http_realip_module --with-http_gunzip_module --with-http_gzip_static_module
- --with-http_secure_link_module --with-http_auth_request_module --with-file-aio --with-ipv6
如果有则下一步,如果没有需要重新编译下依赖模块
四.配置ipv6隧道
4.1.注册登陆 https://www.tunnelbroker.net/ (需要邮箱验证)
4.2.Create Regular Tunnel(输入外网ip地址,也就nginx所在的服务器外网地址,并选择亚洲:HK)
4.3 tab到 ExampleConfigurateions到栏目下 select 与自己操作系统对应的名称,我选择的是Linux-route2 ,copy展示出来的命令在终端中执行
- modprobe ipv6
- ip tunnel add he-ipv6 mode sit remote 216.218.221.6 local 115.39.xx.505 ttl 255
- ip link set he-ipv6 up
- ip addr add 4001:470:18:2d1::2/64 dev he-ipv6
- ip route add ::/0 dev he-ipv6
- ip -f inet6 addr
回去之后会看到
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436
- inet6 ::1/128 scope host
- valid_lft forever preferred_lft forever
- 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
- inet6 fe80::516:4eff:fe02:1bab/64 scope link
- valid_lft forever preferred_lft forever
- ping6 x001:4x0:18:2f1::2 (HE中ipv6的地址,如果能ping6通说明配置成功)
五.配置nginx支持ipv6
- listen 80;
- listen [::]:80 ipv6only=on;
- server_name xxx.xxx.com;
HTTPS的配置
- listen 443 ssl http2;
- listen [::]:443 ssl http2;
- server_name xxx.xxx.com;
执行以下命令就看到监听的端口是否支持ipv6
- # netstat -lan|grep LISTEN
- # netstat -tulpn | grep :80
- tcp 0 0 10.165.40.56:80 0.0.0.0:* LISTEN 1147/nginx
- tcp 0 0 :::80 :::* LISTEN 1147/nginx
- tcp 0 0 :::8080 :::* LISTEN 1168/java
- tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 1168/java
- tcp 0 0 :::7080 :::* LISTEN 1203/java
- tcp 0 0 :::8009 :::* LISTEN 1168/java
六.配置 DNS 使其支持 IPv6 解析
6.1AAAA解析,值填 HE里的Client IPv6 Address,去掉最后的/64即可,如4001:370:200:100::2
6.2 ping6 demo.test.com (配置好的域名)看到正常输入就说明配置成功了