北京移动只要交200元初装费,然后就可以免费使用网络了。网速虽然不太快,但也有100M了,我准备把它单独拉出来,作智能家居用。这网络看着便宜,但没有公网IP,我又要内网穿透,想想还是启用ipv6吧。折腾了一天,参考很多老大们的经验,总算搞定了。之所以写下来,是因为这东西不难,很简单,特别适合喜欢网络便宜,又没有公网ip的同学。
先说一个背景,我之前一直使用公网ip做内网穿透,通过阿里云申请证书和域名解析,通过nginx作反代,通过端口转发给不同的应用。比如homeassistant,node-red,docker,微信,智能音箱。我现在希望沿用这个套路,只是不要公网ip了,使用ipv6直接访问nginx。
1、检查运营商光猫是否启用ipv6
帐号: CMCCAdmin
默认密码: aDm8H%MdA
运营商已经默认启用了ipv6,我不需要做任何设置
2、查询nginx所在的树莓派ipv6
登录树莓派
# 在树莓派执行:
curl http://ipv6.whatismyip.akamai.com/
树莓派会返回其ipv6,记录下来。这个地址就是外网访问时的地址
3、阿里云重新申请一个证书,和一个访问域名解析
3.1 申请证书
3.2 申请成功之后,下载下来备用
3.3 域名解析
4、将刚刚下载的证书,改个名字,上传到nginx相关文件夹
5、配置nginx反代
# 与原配置方式一样,只需改动3点:
# 1、访问域名:刚刚解析的名字
# 2、证书文件:刚刚上传的证书文件
# 3、监听,ipv6监听格式为 listen [::]:端口号
示例
server {
listen [::]:3352 ssl;
ssl_certificate /etc/nginx/cert/cert_nginx_1.pem;
ssl_certificate_key /etc/nginx/cert/cert_nginx_1.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
server_name hass.abc.top;
access_log /var/log/nginx/hass.abc.top_nginx.log combined;
error_log /var/log/nginx/hass.abc.top_nginx.error.log debug;
index index.html index.htm index.php;
if ($ssl_protocol = "") {
return 301 https://$host$request_uri;
}
#error_page 404 /404.html;
#error_page 502 /502.html;
charset utf-8; #默认编码方式
client_max_body_size 75M;
# 其他的请求全部交给Python的uWSGI来处理
location / {
proxy_pass http://192.168.1.4:8123;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
重启nginx
sudo nginx -s reload
6、完成,浏览器访问
https://hass.abc.top:3352
搞定。
不申请公网ip,一样做到内网穿透
|