使用IPV6给自己的网站加速

前段时间发现用的电信宽带接入了IPv6,于是试试能有什么作用,结果测试了一下到国外的速度很惨,国内又没用然后就关了。
隔了几天我想到虽然ipv4封了端口,那IPv6怎么样?用Vmware装了个Centos搭了环境。然后用IPv6去访问结果打不开,研究了一番找到两个原因,一是IPv6好像必须绑定域名,二是路由器默认开启了IPv6防火墙。关闭防火墙然后绑定域名,用手机4G打开了速度还很快,装了Speedtest测试能跑满带宽。
在同时拥有V6和V4的设备上V6是优先使用的而且现在手机4G网络都提供了IPv6,于是我想到了可以给现有的网站增加一个AAAA记录,让网站能支持IPv6还能加速国内用户(几乎所有手机用户和部分宽带用户)访问(水管还粗),一举两得。最重要的是无需北岸。当然你也可以直接搭建IPv6的网站,不过并不推荐。并且如果IPv6不能访问会自动切换使用IPv4进行访问,所以配置后无任何副作用。

1.选择方案

我能想到的方案有两种:

1.源站在放在自己机器,IPv4使用其他端口IPv6使用默认端口。使用国外机器通过IPv4反代提供IPv4访问。

2.源站放国外,自己机器通过IPv4反代国外机器,开启IPv6。

首先两种方案都能提供IPv4访问和IPv6访问加速,并且即使IPv6炸了也不影响网站的正常访问。(这点很重要)

如果你用的机器性能比较强的话可以考虑放在自己机器上,如果你的机器比较弱比如某些NAS还是推荐方案2。对已有的站点加速就直接方案2吧。

2.开启IPv6

确认自己运营商已经开通IPv6并且有DHCP-PD,路由器支持DHCP-PD。(如果路由不支持,那就只有用光猫开启DHCP-PD缺点是必须光猫拨号)

华硕、网件和OpenWrt都是支持的。这里我用的是梅林固件

首先进入自己的光猫后台,把网络连接里的IPv4改为IPv4&IPv6。

然后进入路由器打开IPv6,设置如图(保存后能看到IPv6ip就成功了)

再到防火墙中关闭IPv6防火墙或者自己配置规则。

3.给网站配置加速

选择一个支持解析AAAA记录的DNS,增加一个AAAA记录指向你的IPv6。

之后需要配合IPv6 DDNS来更新域名的AAAA记录。

我这边使用的是CloudFlare,建议开启V6后搭建环境自己检测一下80&443端口能不能用。

编译Nginx的时候增加IPv6模块--with-ipv6

方案2

配置一下Nginx反代你的网站,由于我不怎么熟悉Nginx反代,所以这里只能贴一个我用的配置。

Nginx配置
server
    {         
         listen 80;
         #开启80端口IPv6监听
	 listen [::]:80;
         server_name    yourdomain.com www.yourdomain.com;  
         return      301 https://$server_name$request_uri;
}
server
	{
        listen 443 ssl http2;
	#开启443端口IPv6监听
	listen [::]:443 ssl http2;
        server_name     yourdomain.com www.yourdomain.com;
        ssl_certificate /usr/local/ecc/0001_chain.pem;
        ssl_certificate_key /usr/local/ecc/yourdomain.com.key;
        ssl_trusted_certificate /usr/local/ecc/0001_chain.pem;
        
	server_tokens        off;
        ssl on;
	ssl_protocols              TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
	ssl_prefer_server_ciphers on;
	ssl_dhparam          /usr/local/nginx/conf/dhparams.pem;
        ssl_ciphers "EECDH+AES128:RSA+AES128:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_ecdh_curve prime256v1:secp384r1;
        ssl_session_cache shared:SSL:10m;
	ssl_session_timeout        1d;
	ssl_stapling               on;
	ssl_stapling_verify        on;
		#反代缓存需要自行配置
        location / {
                proxy_set_header Accept-Encoding "";
	        proxy_cache web_cache;
                proxy_ignore_headers   Expires Set-Cookie;
                proxy_cache_valid 200 304 2m;
                proxy_cache_key  $scheme$proxy_host$request_uri;
                add_header X-Proxy-Cache $upstream_cache_status;
                expires 10m;
                proxy_pass             https://yourdomain.com/;
                proxy_redirect          off;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host "yourdomain.com";


        }
        access_log /usr/local/nginx/log/yourdomain.com.log;
}

重启Nginx。就可以用IPv6打开你的网站了。

然后在机器本机上定时跑一个DDNS脚本就可以在ip变动时更新,dns更新过程中IPv6会无法访问,但是会自动切到IPv4,并不影响访问。

CloudFlare DDNS: https://github.com/robertsky/Cloudflare-IPv6-DDNS

可能需要自行修改一下。

方案1

如果采用方案1的话,Nginx配置参考这样

源站
server
    {         
         listen 80;
         listen [::]:80;
         server_name    yourdomain.com www.yourdomain.com;  
         return      301 https://$server_name$request_uri;
}

server
    {
        listen 443 ssl http2;
        listen 8888 ssl http2;
        listen [::]:443 ssl http2;
        #listen [::]:80;
        server_name yourdomain.com www.yourdomain.com;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/yourdomain.com;
        ssl_certificate /usr/local/ecc/0001_chain.pem;
        ssl_certificate_key /usr/local/ecc/yourdomain-ecc256.key;
        ssl_trusted_certificate /usr/local/ecc/0001_chain.pem;

	server_tokens        off;
        ssl on;
	ssl_protocols              TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
	ssl_prefer_server_ciphers on;
	ssl_dhparam          /usr/local/nginx/conf/dhparams.pem;
        ssl_ciphers "EECDH+AES128:RSA+AES128:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_ecdh_curve prime256v1:secp384r1;
        ssl_session_cache shared:SSL:10m;
	ssl_session_timeout        1d;
	ssl_stapling               on;
	ssl_stapling_verify        on;

        include rewrite/wordpress.conf;

        #error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

        include enable-php-pathinfo.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log  /usr/local/nginx/log/yourdomain.com.log;
    }
国外机器
server
    {         
         listen 80;
         server_name    www.yourdomain.com yourdomain.com;  
         return      301 https://$server_name$request_uri;
}
server
	{
        listen 443 ssl http2;
        server_name     www.yourdomain.com yourdomain.com;
        ssl_certificate /usr/local/ecc/0001_chain.pem;
        ssl_certificate_key /usr/local/ecc/yourdomain-ecc256.key;
        ssl_trusted_certificate /usr/local/ecc/0001_chain.pem;

	server_tokens        off;
        ssl on;
	ssl_protocols              TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
	ssl_prefer_server_ciphers on;
	ssl_dhparam          /usr/local/nginx/conf/dhparams.pem;
        ssl_ciphers "EECDH+AES128:RSA+AES128:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_ecdh_curve prime256v1:secp384r1;
        ssl_session_cache shared:SSL:10m;
	ssl_session_timeout        1d;
	ssl_stapling               on;
	ssl_stapling_verify        on;

        location / {
                proxy_set_header Accept-Encoding "";
	        proxy_cache web_cache;
                proxy_ignore_headers   Expires Set-Cookie;
                proxy_cache_valid 200 304 2m;
                proxy_cache_key  $scheme$proxy_host$request_uri;
                add_header X-Proxy-Cache $upstream_cache_status;
                expires 10m;
                proxy_pass             https://www.yourdomain.com:8888/;
                proxy_redirect          off;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host "www.yourdomain.com";


        }
        access_log /usr/local/nginx/log/yourdomain.com.log;
}

反代机配置一下hosts。
方案1除了DDNS还需要一个同步IPv4到反代机hosts的脚本。

这样就相当于给自己搭了一个电信牌无限流量CDN。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注