本文将介绍如何在Ubuntu服务器上配置内网穿透,以便通过公网域名访问内部服务, 以轻量导航站van-nav为例。
前提条件
- 两台Linux服务器(本文以两台Ubuntu22.04为例)
- 控制面板服务器IP:18.138.249.128
- 目标服务器IP:35.212.231.21
- 目标服务器上运行一个Docker容器或者二进制文件,提供HTTP服务
- 使用的内网穿透工具支持HTTP协议
配置步骤
1. 确定内网服务地址
在目标服务器上,运行以下命令以查看IP地址:
输出示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000 link/ether 42:01:0a:8a:00:04 brd ff:ff:ff:ff:ff:ff inet 10.138.0.4/32 metric 100 scope global dynamic ens4 valid_lft 2138sec preferred_lft 2138sec inet6 fe80::4001:aff:fe8a:4/64 scope link valid_lft forever preferred_lft forever 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:5c:de:e0:39 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:5cff:fede:e039/64 scope link valid_lft forever preferred_lft forever
|
2. 运行Docker容器
在目标服务器上,运行以下命令启动Docker容器, 这条命令的意思是启动docker容器, 并将 Docker 容器中的 /app/data
目录映射到主机上的当前文件夹下:
1
| docker run -d --name tools --restart always -p 8080:6412 -v $(pwd):/app/data mereith/van-nav:latest
|
也可以使用可执行文件, 下载 release 文件夹里面对应平台的二进制文件,直接运行即可. 具体步骤可查看官方文档.
3. 配置服务器端(frps)
在控制面板服务器上,编辑frps.toml
文件:
1 2
| bindPort = 7000 vhostHttpPort = 8080
|
4. 配置客户端(frpc)
在目标服务器上,编辑frpc.toml
文件:
1 2 3 4 5 6 7 8 9
| serverAddr = "18.138.249.128" serverPort = 7000
[[proxies]] name = "web" type = "http" localIP = "10.138.0.4" localPort = 8080 customDomains = ["nat1.status.aptzone.cc"]
|
5. 运行frp
配置 frps
的 systemd
服务
- 创建
frps
的 systemd
服务单元文件:
1
| sudo vim /etc/systemd/system/frps.service
|
- 在文件中添加以下内容:
1 2 3 4 5 6 7 8 9 10 11
| [Unit] Description=FRP Server Service After=network.target
[Service] Type=simple ExecStart=/root/frp/frps -c /root/frp/frps.toml Restart=on-failure
[Install] WantedBy=multi-user.target
|
- 保存并退出编辑器,然后重新加载
systemd
配置:
1
| sudo systemctl daemon-reload
|
- 启动并启用
frps
服务:
1 2
| sudo systemctl start frps sudo systemctl enable frps
|
配置 frpc
的 systemd
服务
- 创建
frpc
的 systemd
服务单元文件:
1
| sudo vim /etc/systemd/system/frpc.service
|
- 在文件中添加以下内容:
1 2 3 4 5 6 7 8 9 10 11
| [Unit] Description=FRP Client Service After=network.target
[Service] Type=simple ExecStart=/root/frp/frpc -c /root/frp/frpc.toml Restart=on-failure
[Install] WantedBy=multi-user.target
|
- 保存并退出编辑器,然后重新加载
systemd
配置:
1
| sudo systemctl daemon-reload
|
- 启动并启用
frpc
服务:
1 2
| sudo systemctl start frpc sudo systemctl enable frpc
|
检查服务状态
您可以使用以下命令检查 frps
和 frpc
服务的状态:
1 2
| sudo systemctl status frps sudo systemctl status frpc
|
上述步骤正确执行之后, 我们应该可以通过http:// host + port访问了. 但是由于我们的服务并不是在80端口上面运行, 所以还需要配置Nginx反向代理.
6. 确认Nginx Proxy Manager配置
确保Nginx Proxy Manager正确配置代理主机(Proxy Host)来指向您的Docker容器。
- 域名:
nat1.status.aptzone.cc
- 方案:
http
- 转发主机名 / IP:
18.138.249.128
- Forward Port:
8080