我想用 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 PRO 这 iptables 转发就行了啊 |
![]() | 5 Tink PRO 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 |
![]() | 36 h3n6Qx2UB9a4g477 2019-06-17 16:28:32 +08:00 via Android @ae3803 既然是 minecraft,不如尝试下用 bngeecord 来转发 |
![]() | 37 Apllex 2019-06-18 00:04:45 +08:00 via Android 端口很熟悉 minecraft ? |