没有公网的服务器上的 web 服务如何通过有公网的服务器来访问?

2022-10-14 11:08:00 +08:00
 css3

web 服务部署在 A 服务器上,A 能连外网,但自身没公网, B 服务器有公网,可用公网通过 ssh 进入,B 网络的路由器可以配置端口转发功能, 目前通过 autossh ,可以直接在 B 内 ssh 进入 A , 目前在 A 上部署了个 web , 原以为也可以通过 autossh 的方式在 A 上面将端口转发到 B ,再通过公网,通过转发出来的端口访问,但刚进行了尝试访问不了。有没有解决方案呢,最好不借助工具了,不知道有没有方案

2025 次点击
所在节点    问与答
29 条回复
InDom
2022-10-14 11:13:57 +08:00
Google: iptables 端口转
InDom
2022-10-14 11:14:05 +08:00
端口转发
xdzhang
2022-10-14 11:15:04 +08:00
直接反代嘛
css3
2022-10-14 11:15:18 +08:00
目前是这样的:
ssh -R 0.0.0.0:5003:localhost:5002 -p internet_server
5003 通过路由配置转发到公网了
css3
2022-10-14 11:18:41 +08:00
bushiren
2022-10-14 11:25:50 +08:00
那就 frp 穿透试试看了,再不然就试试 蛤蟆吃
longbow0
2022-10-14 11:57:19 +08:00
zerotier 也可以
LLaMA2
2022-10-14 11:58:04 +08:00
要什么工具?直接 B 机器上 nginx ,nginx 转发到 A 机器,你的 B 机器可以访问 A 机器的。这一切都是流畅的!
要不,我学 ssh 哥的回复:

开 ssh ,我来!
wu00
2022-10-14 11:59:38 +08:00
既然是 web 服务,最简单的应该是反向代理吧。
A 提供 web 服务,B 可通过内网访问 web 服务
B 安装 nginx 将指定请求转发到 A

另外云服务器一般都有提供 nat 网关来干这个事情,nat+弹性公网 ip 多服务器共享带宽出入
css3
2022-10-14 12:11:21 +08:00
@wu00
@ye4tar
A 没有公网,B 的 nginx 转发到 A , 这个操作具体要在 B 的 nginx 配置 A 的啥值?
wu00
2022-10-14 12:17:42 +08:00
A 机器的 web 服务地址,比如 http://192.168.1.2:5002
liuzhaowei55
2022-10-14 12:21:37 +08:00
A 不用做什么,B nginx 反代到 A 的 ip 端口即可
LLaMA2
2022-10-14 12:36:35 +08:00
B 机器的 nginx conf.d 中 xxxx.conf 配置

server {
listen 80;
listen [::]:80;
server_name _;
root /data/web/;

location /api/ {
proxy_pass http://192.168.1.200:3000/; // A 机器 web 服务
}
}
gesse
2022-10-14 13:24:47 +08:00
ssh 不知道性能怎么样,要不用 gost 试试?
https://gost.run/tutorials/port-forwarding/#_4
titanium98118
2022-10-14 13:38:15 +08:00
13 楼的方法就可以
jidesheng
2022-10-14 16:43:07 +08:00
那就是 13 楼提到的反代服务器,只要你的 B 服务器能访问 A 服务器的 web 资源,你只需要在 B 上面架设一个 Nginx ,通过 proxypass 访问 A 服务器的 web 服务就可以了,如果有别的需求,就 zerotier 或者 tailscale 进行组网
alie99400
2022-10-14 17:23:15 +08:00
B 机:
iptables -t nat -A PREROUTING --dst B 机 IP -p tcp --dport B 端口 -j DNAT --to-destination A 机 IP:端口
iptables -t nat -A POSTROUTING --dst A 机 IP -p tcp --dport 6666 -j SNAT --to-source B 机 IP
css3
2022-10-14 23:03:19 +08:00
@ye4tar 按你这个配置了,没有用,A 的 web http://172.9.52.1:5002 在 A 上 curl 命令是可访问的,然后通过以下 nginx 配置转到 B 的 5003 , 在 B 上 curl IP:5003 curl: (7) Failed to connect to x.x.x.x port 5003: Connection refused
server {
listen 5003;
listen [::]:5003;
server_name _;
root /data/web/;

location /api/ {
proxy_pass http://172.9.52.1:5002/;
}
}
~
而且我也完全不能理解,proxy_passproxy_pass http://172.9.52.1:5002/;,A 的 IP 对于 B 来说,是不通的啊, 这里配了 A 的 IP 有啥用啊
chinni
2022-10-14 23:57:16 +08:00
cloudflared
datocp
2022-10-15 00:29:24 +08:00
最早时用 socat 反向连接

上次测试时用 softether 建立反向连接,用 haproxy 解决该客 ip 记录。

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

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

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

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

© 2021 V2EX