前言

众所周知,云服务器稍微高一点的配置价格有多贵,但是它优点是有固定的公网ip。而家庭网络要么是没有公网ip,要么有公网ip开放web服务会被运营商封掉(如果域名不备案还做了ddns、并且还有对外的web服务)。那么有没有办法将家庭内网服务映射到公网访问呢?答案是有的,内网穿透技术就是为了解决这个问题而生的。我下面就要讲讲如何将一个家庭内网的web服务映射到公网,而且还不带端口访问。

当前设备

  • 一台云服务器(ubuntu),我这是腾讯云的新加坡的云服务器,这样就可以域名解析不用备案了。
  • 一个注册在赛博菩萨cloudflare上的域名,这样可以很方便的用他们的ssl证书和ddos防护。
  • 一台内网服务器(ubuntu),是一台迷你机。

大致流程

  1. 云服务器安装WireGuard服务端。
  2. 内网主机部署了一个后台服务和一个web服务,web服务使用nginx代理。
  3. 内网主机安装WireGuard客户端。
  4. 云服务器和内网主机建立WireGuard连接。
  5. 云服务器配置nginx代理,将内网主机的web服务映射到公网。
  6. cloudflare解析域名到云服务器的公网ip。

具体流程说明

云服务器安装WireGuard服务端

可以借助脚本一键安装 仓库地址为

安装脚本

# 安装
wget -O wireguard.sh https://get.vpnsetup.net/wg

# 执行
sudo bash wireguard.sh

具体交互步骤我就不说了,默认的就行
新建客户端,就是脚本的指令1 如下图,客户端名称随意,自己能分辨即可,我这里是创建了两个,一个给工作的windows,一个就是给内网的迷你主机。
image-20241218171000298

生成的配置文件在/root目录下,名称为你起的名称.conf

windows有客户端直接导入即可

ubuntu中放在/etc/wireguard目录下,改名为wg0.conf,然后通过命令

wg-quick up wg0

启动即可。

使用命令设置开机启动

systemctl enable wg-quick@wg0

至此两台机器组网完成,可以使用wg指令查看

云服务器

image-20241218171637428

内网迷你机

image-20241218171731324

注意

云服务器需要将默认的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地址即可。