yan's blog

内网服务暴露在公网的几种方式

前排提示 如果你准备将公司内网的信息暴露到公网,请在操作之前自行确认是否有信息泄露及安全风险,本文不承担由此带来的任何后果。

有的时候我们有一些运行在内网的服务,没有公网IP,需要临时暴露在公网供自己或其他人访问,本文探讨了几种可以达到的方法。

1. 使用比如 ngrok, cloudflared 等等的软件

这种方法应该来说是最简单便捷的,只需要下载安装对应的软件,启动服务即可。这里有一个前提是服务器能连接外网。这里提到的这两个软件都不需要太多配置,可能需要登陆一个账号就可以使用了。目前这两种只支持 http/https 协议,对其他协议还不支持

2. 通过 iptables 设置 DNAT 来完成

如果你有一台具有公网IP的服务器,可以是在云服务商购买的,且你想暴露的内网服务器和这台服务器在一个局域网内,那么可以使用 iptables 来实现。

在具有公网IP的服务器上执行下面的命令

iptables -t nat -A PREROUTING -dport 9999 -DNAT 192.168.1.1:9998

即可将对公网IP服务器的 9999 端口的访问转发到 192.168.1.19998 端口。注意,这里还需要打开 Linux 的转发功能。

3. 通过 SSH 端口转发来实现

这里同样需要一个具有公网IP的服务器,具体的操作方法有两种

3.1 本地端口转发

ssh -L 8080:192.168.1.1:9999 [email protected]

这个命令的作用如下:通过ssh登陆到 10.0.0.3,然后将对本机 8080 的访问流量通过 10.0.0.3 转发到内部的 192.168.1.1:9999。这样,同事通过访问你的机器,就能访问到对应的服务了。

3.2 远端端口转发

ssh -R 9999:192.168.1.1:3456 [email protected]

这个命令的作用如下:通过ssh登陆到 10.0.0.3,然后将对远端 9999 的访问流量通过本机转发到内部的 192.168.1.1:3456。这样,同事通过访问10.0.0.3,就能访问到你内网对应的服务 192.168.1.1:3456了。

4. 路由器的DMZ及端口转发

这个需要登陆路由器后台,一般来说路由器都是支持这两个功能的,这个适用于路由器拨号就有公网IP的幸运儿。

5. 通过 VPN 访问

在一台具有公网IP的服务器上部署 VPN 服务,如 openvpn, wireguard。然后通过 peer to peer 的访问来达到

6. 将服务通过云服务商的负载均衡或者NAT网关暴露

这个也是个办法,具体的操作需要查看每个云的文档