无外网的内网机器,如何正确实现内网穿透?

2021-05-14 01:58:50 +08:00
 saytesnake
内网穿透方面,相信无论是 frp 或 nps 都比较常用且易用了,不过目前有这个需求,用户的网络:

内网 A 服务器(无法访问外网) 192.168.1.100
内网 B 服务器(内外网均可访问) 192.168.1.253
公网 C 服务器,8.8.8.8

现在是想访问 192.168.1.100 的 3306 端口也就是 mysql 的,目前 Google 查询的做法大致是这样,以比较流行的 frp 为例,

1 、「内网 A 服务器 192.168.1.100 」 配置 frpc 走 socks5 代理到 192.168.1.253 ,引出一个远程端口如 3307 端口;

2 、在「内网 B 服务器 192.168.1.253 」同时配置 frps 与 frpc,frps 做 socks5 代理提供给「内网 A 服务器 192.168.1.100 」用,然后如常配置 frpc 走「公网 C 服务器,8.8.8.8 」,当然也可以自行搭建其它的 socks5 代理。

总感觉这样子十分繁琐...而且性能、稳定性上未知,这个需上生产环境,量会比较多,但需求是一样的,就是安全地访问无公网 IP,且无法上网的内网数据库服务器。

OpenVPN,如果在用户的网络如「内网 B 服务器 192.168.1.253 」这样的安装 OpenVPN 客户端,仅点对点(通过 tun 的虚拟网卡 ip )可以互相访问,通过路由可以让「内网 B 服务器 192.168.1.253 」访问到「公网 C 服务器,8.8.8.8 」所处的局域网 /内网,但这个跟我们的需求反过来了,是我们要访问别人而不是让别人访问我们...

WireGuard 估计也是类似吧...不知道各位大神是否有好的建议或者是正在实践中的。
2344 次点击
所在节点    程序员
28 条回复
saytesnake
2021-05-14 13:53:53 +08:00
@no1xsyzy 是的,如果用于生产,多用户下几个甚至几十个 192.168.1.0/24 或其它同段的,NAT to NAT 十分不适合。WG 研究得不多,且遇到 MS 全家桶用户的情况下,v0.3.14 版本的简陋客户端还不知道是否稳定,没有 Linux 端的灵活性了。
saytesnake
2021-05-14 13:56:14 +08:00
@uncat 谢谢,这个方式是可行的,但遇到 Windows 系的就麻烦了,话说我有不少实践,Windows 的 netsh 端口转发,即便是 2016 的版本也经常不明原因失效,IP helper 的工作原理不懂。
kav2007
2021-05-14 14:04:35 +08:00
@saytesnake 去年出过一个小米实习生,是把内网服务器 FRP 穿透到公网,服务器被黑。在生产环境慎用 FRP 到公网。即使个人使用 FRP,也要注意防范风险。穿透 RDP 、NAS 到公网被黑,中勒索病毒,网上也有不少人中招。
VPN 是商用成熟可靠的技术。VPN 隧道建立之后网络可达就行,不需要分别再配端口转发
uncat
2021-05-14 14:34:45 +08:00
@no1xsyzy 是的, 我理解错了楼主关于: `内网 B 服务器(内外网均可访问)' 的意思, 以为 B 有公网 IP.

如果是 B 没有公网 IP, 但可以访问内网和公网. 有一台具备公网 IP 的服务器 C. 解决思路:

1. 将 B 的 22 端口通过 FRP 绑定到 C 上, 假设是 C 上的 1428 端口
2. C 服务器禁止公网访问 1428 端口
3. 添加如下配置到如下路径的文件最前面:`~/.ssh/config`, 请根据具体情况更新尖括号内的内容

Host c
User <C 的用户名>
HostName <C 的公网 IP 地址>

Host b
User <B 的用户名>
HostName 127.0.0.1
Port: 1428
ProxyJump c

Host database
User <A 的用户名>
HostName <A 的内网 IP 地址>
ProxyJump b
LocalForward 127.0.0.1:13306 127.0.0.1:3306

4. 打开两个命令行窗口
5. 在窗口 1 执行: `ssh database`,保持窗口 1 登陆连接的状态. 在窗口 2 执行: `nc -vz localhost 13306`
6. 如果窗口 2 显示 connected. 就可以了
7. 你本地访问 13306 就等于访问 A 的 3306 了
uncat
2021-05-14 14:36:50 +08:00
因为 FRP 映射的 SSH 端口是完全公网不可见的. 因此, 这里的安全性也是相对可靠的. FYI @kav2007
uncat
2021-05-14 14:38:00 +08:00
@saytesnake 是的. 如果你是为了远程访问 RDP 协议还好. 如果 B 这台是 Windows 的确就不好搞了.
saytesnake
2021-05-14 14:51:54 +08:00
@kav2007 这个是清楚的,其实正确配置 stcp,问题都不大,错不在 frp 本身,而是本身服务器的安全性。
kav2007
2021-05-14 19:27:14 +08:00
@uncat ssh 开启公钥登录,关闭密码登录,再改个非标端口,安全性还算可以。
@saytesnake

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/776816

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX