内网服务暴露在公网的几种方式
前排提示 如果你准备将公司内网的信息暴露到公网,请在操作之前自行确认是否有信息泄露及安全风险,本文不承担由此带来的任何后果。
有的时候我们有一些运行在内网的服务,没有公网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.1
的 9998
端口。注意,这里还需要打开 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网关暴露
这个也是个办法,具体的操作需要查看每个云的文档