如题,目前遇到这么个问题,一开始想的是内网穿透,但是被 pass 了说是对内网不安全,经过一番调研,阿里云有自己的端云互联工具,但是又不想用阿里云,太贵了。我们的某个竞品,他们部署在云端的后台就能直接发现自己内网的服务并成功调用,这个是怎么做到的呢?希望老哥们给指点一下迷津,感谢
1
MinJin 2023-02-15 09:36:46 +08:00
zerotier
|
2
luomao 2023-02-15 09:37:53 +08:00 1
我们这边是和阿里云拉了一条专线,可以直接互访内网
|
5
Aliberter OP 我们用的 springcloud 那一套,有能跟服务的项目做集成做绑定,不用额外的网络配置和三方工具,只要本地项目跑起来,就能被云端发现调用,这种技术实现吗?
|
6
cheng6563 2023-02-15 09:47:40 +08:00
ssh 算第三方工具吗?用 ssh 也能穿透
|
7
tramm 2023-02-15 09:48:06 +08:00
你们公司不能开放端口吗?
不开放端口,也没专线的话,云服务器起个 TCP 服务,公司的这边写个 TCP 中转服务通过长连接连上去,让云服务器那边所有请求下发到公司的这个中转服务器上...不过感觉这个有点麻烦啊 |
8
Seulgi 2023-02-15 09:50:41 +08:00
阿里的端云互联实际也和内网穿透差不多。
|
9
Lentin 2023-02-15 09:52:23 +08:00
防火墙上做 nat 转发 设置好源 IP 和目的地 IP 端口就行了
|
10
Diego01 2023-02-15 09:54:43 +08:00
公网访问、VPN 、智能接入网关、共享专线
|
11
Aliberter OP @cheng6563 就是希望 ssh 能融入进微服务代码架构里最好,每一个服务启动后都连一下 ssh ?这样可能也能被他们接受
|
12
Aliberter OP @tramm 能开放端口,就是不要有明显的穿透工具就行,你说的这个是不是就是 frp 的原理啊...手写 tcp 服务再中转啥的...可能确实有点麻烦
|
13
Aliberter OP @Seulgi 对 我看也是 就是有个中转 但是他们不同意我们自己用 frp 之类的 还需要各种配置 还要改项目配置的 ip 麻烦 就想无脑启动
|
17
Eytoyes 2023-02-15 10:05:51 +08:00
这不是网工的事吗?提个申请开个口子映射到你的内网服务器,把源地址和目的地址都限制一下就行了
|
18
lower 2023-02-15 10:06:19 +08:00
楼主项目里有集成消息队列么,感觉应该适合你的场景,改造改造
|
19
ragnaroks 2023-02-15 10:07:16 +08:00
zerotier 本身有库,集成到你的项目中即可,我用很久以前就实现了 MC 一键 P2P 联机
|
20
luomao 2023-02-15 10:07:50 +08:00
和 spring cloud 那套融合起来,还有个比较蛋疼的方法。两边都接入一个消息队列,譬如 rabbitMq ,网关收到消息后将消息发送到队列中并保持连接,内网服务器消费这个”请求”,“请求”的结果消费完以后再将”响应”发送到队列中,网关消费掉这个”响应”后释放连接并返回
|
21
killva4624 2023-02-15 10:08:39 +08:00
合理合法、又不动网络和运维参与,说实话不太可能...
|
22
koloonps 2023-02-15 10:08:49 +08:00
SSH -L 将服务器的端口映射到本地,SSH -R 将本地端口映射到服务器上.修改本机路由,将服务器地址转发到 localhost.这样应该就可以了
|
23
lucifer69 2023-02-15 10:09:36 +08:00
部署一个服务注册中心?比如 nacos
|
24
xuanbg 2023-02-15 10:10:23 +08:00
VPN 。我在家里,要使用公司的测试环境的话,就拨公司的 VPN 。
|
25
koloonps 2023-02-15 10:11:26 +08:00
最简单的方式是开一个 openvpn,不用对外开放端口.用 SSH 将 openvpn 端口映射到本地,然后你在 openvpn 客户端中将服务器设置为本地就可以了
|
27
xuanbg 2023-02-15 10:15:02 +08:00 1
如果服务器上有 doker 的话,稍微改一下下面的 docker 命令里的一些参数,就能通过 vpn 来打通云端的环境了。
docker run -d \ --name=wireguard \ --cap-add=NET_ADMIN \ --cap-add=SYS_MODULE \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Europe/London \ -e SERVERURL=wireguard.domain.com \ -e SERVERPORT=51820 \ -e PEERS=1 \ -e PEERDNS=auto \ -e INTERNAL_SUBNET=10.13.13.0 \ -e ALLOWEDIPS=0.0.0.0/0 \ -e LOG_CONFS=true \ -p 51820:51820/udp \ -v /opt/wireguard/config:/config \ -v /lib/modules:/lib/modules \ --sysctl="net.ipv4.conf.all.src_valid_mark=1" \ --restart unless-stopped \ lscr.io/linuxserver/wireguard:latest |
28
Aliberter OP |
29
happyn 2023-02-15 10:17:33 +08:00
首先公司内网,有公网 ip ,可以对外映射服务吗?
如果没有公网 ip ;那肯定得需要端口映射出去; 不用第三方工具,就得自己集成这个服务,本质上跟第三方工具做的事情是一样的; 如果服务不动,ip 也不想改;最简单的方法就是楼上建议的,用 zerotier 、tailscale ,或者 openvpn 一样的工具,把云服务器和公司内网服务器联网到同一个虚拟网络里,然后用 ssh 或者 socat 端口转发,把公司内网的服务映射到云服务器上;这样对于服务端是无感知的; 如果不用三方工具,就得自己做上面的工作了; |
30
koloonps 2023-02-15 10:19:20 +08:00
修改本机路由,不是修改公司的路由.在本机路由表中添加一条就行.
|
31
2han9wen71an 2023-02-15 10:20:36 +08:00
我们是 zerotier
|
32
Aliberter OP |
33
john2022 2023-02-15 10:31:56 +08:00
vpn 接入云端一台服务器,两个子网打通就可以了
|
35
koloonps 2023-02-15 10:36:14 +08:00
你从 nacos 获取的其他服务的地址是服务器的局域网地址,你需要在你的机器路由表上添加一条路由将服务器的地址重定向到本机上.你可以看下 SSH 的内网穿透功能.https://zhuanlan.zhihu.com/p/57630633 参考下这个
|
36
amrice 2023-02-15 10:43:04 +08:00
要么组网,要么直接把设备暴露到公网里呗
|
37
wccc 2023-02-15 10:46:31 +08:00
wireguard 组网
|
38
ilovey482i 2023-02-15 10:51:57 +08:00
如果不组网打通环境的话,只能在云端部署测试服务器,将代码部署到测试服务器上去
|
39
GopherDaily 2023-02-15 10:56:49 +08:00
测试还是开发?测试考虑下 telepresence
|
40
nicholasxuu 2023-02-15 11:12:32 +08:00
如果公司有固定 ip 的网络的话,搭一下 ipsec vpn ,阿里云那儿大概一个月 200 的费用吧。
|
41
ChengHaha 2023-02-15 11:12:53 +08:00
我是在本地启动一个网关,前端指向本地的网关就好了
|
42
nicebird 2023-02-15 12:15:30 +08:00
不难吧,自己开发个代理都可以
|
43
Bottle 2023-02-15 14:30:45 +08:00 1
说一下我们公司的情况:
1 、有两台物理服务器放在公司内网,部署一些服务 2 、办公室没有固定公网 IP 3 、有几台阿里云 ECS ,有公网 IP ,几台 ECS 之间内网互通 需求是:ECS 上的所有服务,都能访问办公室内网两台机器上的服务 我们采用的解决方案是:SSH 远程端口转发 1 、办公室内网服务端口转发到 ECS 指定端口上 2 、ECS 上的服务,通过转发的端口,访问公司内网服务 希望能够帮到你。 参考资料: https://www.ronpad.com/docs/ssh/port-forwarding-4.html https://www.cnblogs.com/XiiX/p/15095135.html |
44
BQsummer 2023-02-15 17:07:26 +08:00
我们公司也有类似场景, ios 打包需要 mac 机器, 云服务没有, 就把 mac mini 放在办公地点的机房, 走的 vpn
|
45
lyc8503 2023-02-15 19:27:25 +08:00
如果不用过墙的话 wireguard 或者 openvpn 就可以? 两者都是完全开源的工具.
|
46
k8ser 2023-02-15 21:17:31 +08:00
wireguard over udp ,国内运营商的环境还是要测试下。
|
47
salmon5 2023-02-15 21:21:40 +08:00
专线
|
48
Dreamacro 2023-02-15 22:16:47 +08:00 via iPad
目前发现比较好的形式是 fly.io 的方案,本地 ctl 通过 wg 映射端口到本地,既可以鉴权又很方便。
|
49
piku 2023-02-16 08:36:25 +08:00 via Android
tram 的方法是正确的,只要有网络连接,无所谓是从内网连到云端还是从云端连到内网。不知道你们中间究竟需要什么样的数据交互,总体上从内网起一个 tcp 连到云服务器上,然后数据走这个长连接就是了。约等于手机接收推送(比如 jipush )消息的原理。
内网穿透一般是指建立一个其他连接可以用的隧道,上面的方法只供一个连接通道用,算是内网穿透的简化吧 |
51
sunnysab 2023-02-16 10:38:09 +08:00 via Android
干过类似事情,不过协议是私有的,代码自己写的,比较好改 😂
|