我想用 A 服务器(端口 25565)来中转 B 服务器(原端口 30525,其中 B 服务器没有控制台权限)的流量 A 服务器系统:Debian9 方案大概是这样:我—— A 服务器(端口 25565)—— B 服务器(原端口 30525)
1
billlee 2019-06-13 23:23:07 +08:00
路由劫持?
|
2
unixeno 2019-06-13 23:37:02 +08:00 via Android
你在 a 上跑一个 tcp 转发的不就好了
然后连 a 服务器的 25565 端口 |
4
Tink 2019-06-13 23:48:49 +08:00 via iPhone
这 iptables 转发就行了啊
|
5
Tink 2019-06-13 23:49:47 +08:00 via iPhone
iptables -t nat -A PREROUTING -p tcp --dport 25565 -j DN AT --to-destination ip:30525
|
10
MonoLogueChi 2019-06-13 23:59:37 +08:00 via Android
在 A 服务器上跑个 Nginx,监听 25565 端口的 TCP,然后转发到 B 服务器的 30525 端口上,类似于反向代理
|
12
ae3803 OP ip 肯定改了啊
|
13
ae3803 OP 我是要用 A 服务器的 25565 端口来转发 B 服务器的 30525 端口的 TCP
|
14
ae3803 OP 这是我用的命令 iptables -t nat -A PREROUTING -p tcp --dport 25565 -j DNAT --to-destination 222.187.xxx.xxx:30525
@Tink @unixeno 试了没反应,iptables -L 也查不到 |
15
ae3803 OP 系统是 Debian9
|
16
Hardrain 2019-06-14 00:35:15 +08:00
在 A 上使用 /运行
1. iptables 如果需要更复杂的功能,比如 filter/load-balancing 等 2. haproxy 3. 简单的 TCP 转发似乎也可以靠 nginx 的 stream module |
18
wtks1 2019-06-14 00:38:07 +08:00 via Android
如果只是 tcp,可以在别的设备上编译一个 rinetd,然后传到目标设备上使用
|
19
hlz0812 2019-06-14 00:41:19 +08:00 via iPhone
iptables 转发,不会命令自己查一键脚本,脚本都不会用就没办法了
|
20
unknowncheater 2019-06-14 00:59:24 +08:00
回去补充 iptables 知识后再来发帖
|
21
likuku 2019-06-14 01:15:09 +08:00
数据流向,访问流向,先表达清楚。
|
22
ihciah 2019-06-14 02:01:08 +08:00 via iPad
你这需求就是普通端口转发 rinetd 最省事,当然 socat 这种也行,iptables 性能比较好,其实你可以直接写 REDIRECT 的,记得打开内核转发
|
23
ZRS 2019-06-14 03:42:10 +08:00
socat
|
24
ech0x 2019-06-14 07:12:56 +08:00 via iPhone
socat 和 iptables 都行,我也推荐 iptables。
|
25
zk123 2019-06-14 07:46:05 +08:00 via iPhone
对 B 服务器没有控制权,凭啥让人家好好的流量走你的 A 服务器.....
|
26
dszhblx 2019-06-14 07:53:33 +08:00 via iPhone
iptables 也就两行命令(本机也转是三行)
如果流量不大,用 rinet 最简单了,一行配置 |
27
WordTian 2019-06-14 08:38:45 +08:00 via Android
除了 iptables 命令,还得一条启用内网转发命令
应该是改 /proc 里的某个文件的值 |
28
Admstor 2019-06-14 10:01:05 +08:00
楼上好多回答是认真的吗?
我如果没理解错 楼主需要的是把 B30525 流量转发到 A25565 且没有 B 服务器控制权 在这种情况下,楼主能做的就是在 B 服务器之前的任何路径上镜像 B 服务器所有流量 本质上是黑客行为 |
29
warcraft1236 2019-06-14 10:01:33 +08:00
@ihciah 高版本的 Ubuntu 什么的默认是打开内核转发的吧?
|
31
mattx 2019-06-14 10:59:01 +08:00
iptables -t nat -A PREROUTING -p tcp --dport 25565 -j DNAT --to-destination [B public ip]:30525
iptables -t nat -A PREROUTING -p udp --dport 25565 -j DNAT --to-destination [B public ip]:30525 iptables -t nat -A POSTROUTING -p tcp -d [B public ip] --dport 30525 -j SNAT --to-source [A 内网地址, 云主机(eth0 是内网地址, 外部有 nat 负责转发) 可能是内网 ip] iptables -t nat -A POSTROUTING -p udp -d [B public ip] --dport 30525 -j SNAT --to-source [A 内网地址, 云主机(eth0 是内网地址, 外部有 nat 负责转发) 可能是内网 ip] /etc/sysctl.conf 增加 net.ipv4.ip_forward = 1 sudo sysctl -p |
32
ae3803 OP @mattx 我按你的这样试了没有用 阿里云的服务器
iptables -t nat -A PREROUTING -p tcp --dport 25565 -j DNAT --to-destination B 服 ip:30525 iptables -t nat -A PREROUTING -p udp --dport 25565 -j DNAT --to-destination B 服 ip:30525 iptables -t nat -A POSTROUTING -p tcp -d B 服 ip --dport 30525 -j SNAT --to-source 172.31.xxx.xxx iptables -t nat -A POSTROUTING -p udp -d B 服 ip --dport 30525 -j SNAT --to-source 172.31.xxx.xxx sysctl -p 有返回 net.ipv4.ip_forward = 1 |
33
ae3803 OP 给那些不知道我干什么的说下:我在某宝租了台 MC 服务器(面板服,没 ssh 控制权),但是其服务器地址是带端口的,我想用自己的服务器来中转这台服务器的流量同时将端口转发成 25565(即 MC 的默认端口)。
|
34
mattx 2019-06-14 14:22:01 +08:00
@ae3803 那你需要排查下原因, 我这样用是可以的. 你也可以试试 nginx 来转发, 有个 docker 镜像很方便做了这个事情, 我也在用. https://hub.docker.com/r/tekn0ir/nginx-stream, 配置应该是这样的 /root/stream.conf.d/myotherservice.conf
upstream myotherservice { server B public:30525; } server { listen 65432 udp reuseport; listen 65432; proxy_pass myotherservice; } docker run -d -p 25565:65432 -p 25565:65432/udp -v /root/stream.conf.d:/opt/nginx/stream.conf.d --name nginx tekn0ir/nginx-stream |
35
aru 2019-06-17 13:50:34 +08:00
socat / haproxy / nginx 都可以在非 root 权限下完成你的需求,性能上 socat 会比较弱一点
nohup socat TCP-LISTEN: 25565,fork,reuseaddr TCP:serverB-ip: 30525 |
37
z919126592 2019-06-18 00:04:45 +08:00 via Android
端口很熟悉 minecraft ?
|