使用家庭网络将内网服务映射到公网访问
前言
众所周知,云服务器稍微高一点的配置价格有多贵,但是它优点是有固定的公网ip。而家庭网络要么是没有公网ip,要么有公网ip开放web服务会被运营商封掉(如果域名不备案还做了ddns、并且还有对外的web服务)。那么有没有办法将家庭内网服务映射到公网访问呢?答案是有的,内网穿透技术就是为了解决这个问题而生的。我下面就要讲讲如何将一个家庭内网的web服务映射到公网,而且还不带端口访问。
当前设备
- 一台云服务器(ubuntu),我这是腾讯云的新加坡的云服务器,这样就可以域名解析不用备案了。
- 一个注册在赛博菩萨cloudflare上的域名,这样可以很方便的用他们的ssl证书和ddos防护。
- 一台内网服务器(ubuntu),是一台迷你机。
大致流程
- 云服务器安装WireGuard服务端。
- 内网主机部署了一个后台服务和一个web服务,web服务使用nginx代理。
- 内网主机安装WireGuard客户端。
- 云服务器和内网主机建立WireGuard连接。
- 云服务器配置nginx代理,将内网主机的web服务映射到公网。
- cloudflare解析域名到云服务器的公网ip。
具体流程说明
云服务器安装WireGuard服务端
可以借助脚本一键安装 仓库地址为
# 安装
wget -O wireguard.sh https://get.vpnsetup.net/wg
# 执行
sudo bash wireguard.sh
具体交互步骤我就不说了,默认的就行
新建客户端,就是脚本的指令1
如下图,客户端名称随意,自己能分辨即可,我这里是创建了两个,一个给工作的windows,一个就是给内网的迷你主机。
生成的配置文件在/root目录下,名称为你起的名称.conf
windows有客户端直接导入即可
ubuntu中放在/etc/wireguard目录下,改名为wg0.conf
,然后通过命令
wg-quick up wg0
启动即可。
使用命令设置开机启动
systemctl enable wg-quick@wg0
至此两台机器组网完成,可以使用wg指令查看
云服务器
内网迷你机
注意
云服务器需要将默认的51820
UDP端口开放,如果你没改的话,家庭网络不需要开发端口。
迷你机的web服务
我使用的是nginx代理的,端口为8899,所以下一步就是需要在云服务器上将流量转发到这台迷你机的8899端口上。
转发流量
云服务器上我依然使用的nginx代理的,当然也有其他办法可以实现,有兴趣的可以自己找找。
nginx配置如下:
下面的10.7.0.3
就是内网迷你机组网的地址,并不是你路由器给他分配的地址!因为我有webocket的需求,所以多加了一个ws的配置,没有需求的可以去掉。
server {
listen 80 default_server;
server_name _;
location /ws {
proxy_pass http://10.7.0.3:8899/ws; # 转发到内网主机的 /ws 路径
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 设置超时时间
proxy_read_timeout 600s;
proxy_send_timeout 600s;
proxy_connect_timeout 600s;
}
location / {
proxy_pass http://10.7.0.3:8899;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
配置域名访问
实际上述内容配置完之后是可以通过你云服务器:80来进行访问的,你后续只需要在cloudflare上配置域名解析@
到你的这个云服务器的ip地址即可。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ALLBS!
评论