题记
本站之前的内网穿透方案是通过路由器+动态域名解析实现的。这里面需要路由器可以绑定到外网IP,最近搬家宽带换成了移动。移动坑爹货死活不给外网IP,所以动态域名解析的路子走不通了。于是有了本篇。
关于可以提供外网IP的内网穿透配置可参考站长之前文章:
1、原理 :局域网自己搭建服务器之DDNS(动态域名解析),基于阿里域名api+python实现
4、搭建自己服务器之frp 0.52.3 内网穿透配置(nginx+frp)及ipv6内网穿透介绍
方案
没有公网IP的内网穿透,有两个路子:
1、IP6直接解析
2、使用代理软件
下面逐一介绍
IP6内网穿透方案
原理:首先IPv6都是公网地址,所以只需将域名解析ipv6 地址即可
配置:光猫开启桥接模式,设置路由器拨号上网,路由器开启ipv6支持(具体配置可参考路由器配置(华为路由WS5200 增强版))
可以打开网站https://ipw.cn/ 看看是否开启成功,
然后ipconfig 可以看到如下信息:
两个IPv6地址都可以用,然后定时获取ipv6 (因为ip有租期会变)做解析就可以了(《局域网自己搭建服务器之DDNS(动态域名解析),基于阿里域名api+python实现》中的脚本已经支持)
坑!
这样解析出来的域名需要客户端支持ipv6 才能访问,但是现在ipv6 普及率不高!!!所以这种方案只能用来自己远程电脑,或者做自己的文件服务器、群晖之类的。
代理软件方案(FRP)
没辙只能用代理的模式了,为什么是FRP呢,因为开源免费,
github&下载地址:https://github.com/fatedier/frp/releases ,github 打不开的话
本站留了个下载备份(包含linux和windows两个版本):https://yy123.ink/itResDetail/21385
使用条件:要有一台有公网IP的服务器,公网服务器打开frp服务器端(frps),局域网服务器打开客户端(frpc)
具体配置:
站长的配置模式说明:域名使用nginx+frp 的模式,请求由nginx 根据域名代理到frps 10000 端口,然后frp 再代理到局域网电脑
服务器配置
cat frps.toml
bindPort = 5000 #客户端连接的端口
vhostHTTPPort = 10000 #对外开放的端口
客户端配置
serverAddr = "" #公网服务器地址
serverPort = 5000 #服务器开放的端口 用于连接
#ssh代理
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22 # 代理的端口
remotePort = 8888 # 对外暴露的端口 不填默认22
#需要密码的ssh代理 stcp ,服务器端也要加相应配置 小编未启用并未配置 具体参见github
[[proxies]]
name = "secret_ssh"
type = "stcp"
secretKey = "1111"
localIP = "127.0.0.1"
localPort = 22
#根据域名切换代理端口
[[proxies]]
name = "blog2"
type = "http"
localIP = "127.0.0.1"
localPort = 7001
customDomains = ["yy123.ink"]
#根据域名切换代理端口
[[proxies]]
name = "blog22"
type = "http"
localIP = "127.0.0.1"
localPort = 7000
customDomains = ["note.yy123.ink"]
#代理mysql数据库,通过外网服务器直连
[[proxies]]
name = "mysql"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3306
remotePort = 3306
nginx配置
server {
listen 80;
listen [::]:80;
server_name yy123.ink;
error_page 497 https://$host$uri?$args;
# 将该服务下的所有请求实体的大小限制为1024m
client_max_body_size 1024m;
location / {
# 将此路由请求的实体大小限制为1024m
client_max_body_size 1024m;
set $target http://127.0.0.1:10000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 1024k;
proxy_buffers 4 1024k;
proxy_busy_buffers_size 1024k;
proxy_temp_file_write_size 1024k;
proxy_pass $target;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
listen 443 ssl; # managed by Certbot
listen [::]:443 ssl;
ssl_certificate /fullchain.pem; # managed by Certbot
ssl_certificate_key //yy123.ink/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
具体参考:https://github.com/fatedier/frp