web 服务部署在 A 服务器上,A 能连外网,但自身没公网, B 服务器有公网,可用公网通过 ssh 进入,B 网络的路由器可以配置端口转发功能, 目前通过 autossh ,可以直接在 B 内 ssh 进入 A , 目前在 A 上部署了个 web , 原以为也可以通过 autossh 的方式在 A 上面将端口转发到 B ,再通过公网,通过转发出来的端口访问,但刚进行了尝试访问不了。有没有解决方案呢,最好不借助工具了,不知道有没有方案
1
InDom 2022-10-14 11:13:57 +08:00
Google: iptables 端口转
|
2
InDom 2022-10-14 11:14:05 +08:00
端口转发
|
3
xdzhang 2022-10-14 11:15:04 +08:00
直接反代嘛
|
4
css3 OP 目前是这样的:
ssh -R 0.0.0.0:5003:localhost:5002 -p internet_server 5003 通过路由配置转发到公网了 |
5
css3 OP |
6
bushiren 2022-10-14 11:25:50 +08:00
那就 frp 穿透试试看了,再不然就试试 蛤蟆吃
|
7
longbow0 2022-10-14 11:57:19 +08:00
zerotier 也可以
|
8
LLaMA2 2022-10-14 11:58:04 +08:00
要什么工具?直接 B 机器上 nginx ,nginx 转发到 A 机器,你的 B 机器可以访问 A 机器的。这一切都是流畅的!
要不,我学 ssh 哥的回复: 开 ssh ,我来! |
9
wu00 2022-10-14 11:59:38 +08:00
既然是 web 服务,最简单的应该是反向代理吧。
A 提供 web 服务,B 可通过内网访问 web 服务 B 安装 nginx 将指定请求转发到 A 另外云服务器一般都有提供 nat 网关来干这个事情,nat+弹性公网 ip 多服务器共享带宽出入 |
10
css3 OP |
11
wu00 2022-10-14 12:17:42 +08:00
A 机器的 web 服务地址,比如 http://192.168.1.2:5002
|
12
liuzhaowei55 2022-10-14 12:21:37 +08:00 via iPhone
A 不用做什么,B nginx 反代到 A 的 ip 端口即可
|
13
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 服务 } } |
14
gesse 2022-10-14 13:24:47 +08:00
ssh 不知道性能怎么样,要不用 gost 试试?
https://gost.run/tutorials/port-forwarding/#_4 |
15
titanium98118 2022-10-14 13:38:15 +08:00
13 楼的方法就可以
|
16
jidesheng 2022-10-14 16:43:07 +08:00
那就是 13 楼提到的反代服务器,只要你的 B 服务器能访问 A 服务器的 web 资源,你只需要在 B 上面架设一个 Nginx ,通过 proxypass 访问 A 服务器的 web 服务就可以了,如果有别的需求,就 zerotier 或者 tailscale 进行组网
|
17
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 |
18
css3 OP @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 有啥用啊 |
19
chinni 2022-10-14 23:57:16 +08:00
cloudflared
|
20
datocp 2022-10-15 00:29:24 +08:00 via Android
最早时用 socat 反向连接
上次测试时用 softether 建立反向连接,用 haproxy 解决该客 ip 记录。 |
22
LLaMA2 2022-10-15 10:37:23 +08:00
@css3 你帖子中说 「可以直接在 B 内 ssh 进入 A 」足以说明 B 可以访问到 A ,你说的不通,是 web 不能访问嘛,web 访问不通你得看你的 A 上监听的端口、防火墙以及监听在的网络!
|
25
css3 OP @ye4tar
nginx 没有我没有尝试通过, 还是通过 ssh 实现了 ssh -NfR 0.0.0.0:remote_port:localhost:web_port 公网服务器 ssh -NfL 公网服务器:port:127.0.0.1:remote_port 公网服务器 |
26
gumupaier 2022-10-18 15:57:13 +08:00
frp
|
27
MoonWalker 2022-10-21 13:32:56 +08:00
@css3 请问下第二句怎么理解
|
28
MoonWalker 2022-10-21 13:33:40 +08:00
@css3 ssh -NfL 公网服务器:port:127.0.0.1:remote_port 公网服务器
|
29
css3 OP @MoonWalker 公网服务器指的公网 IP 地址啊
|