请问如何中转一个没有控制台权限的服务器的 TCP 流量?

2019-06-13 23:10:45 +08:00
 ae3803

我想用 A 服务器(端口 25565)来中转 B 服务器(原端口 30525,其中 B 服务器没有控制台权限)的流量 A 服务器系统:Debian9 方案大概是这样:我—— A 服务器(端口 25565)—— B 服务器(原端口 30525)

3871 次点击
所在节点    宽带症候群
37 条回复
likuku
2019-06-14 01:15:09 +08:00
数据流向,访问流向,先表达清楚。
ihciah
2019-06-14 02:01:08 +08:00
你这需求就是普通端口转发 rinetd 最省事,当然 socat 这种也行,iptables 性能比较好,其实你可以直接写 REDIRECT 的,记得打开内核转发
ZRS
2019-06-14 03:42:10 +08:00
socat
ech0x
2019-06-14 07:12:56 +08:00
socat 和 iptables 都行,我也推荐 iptables。
zk123
2019-06-14 07:46:05 +08:00
对 B 服务器没有控制权,凭啥让人家好好的流量走你的 A 服务器.....
dszhblx
2019-06-14 07:53:33 +08:00
iptables 也就两行命令(本机也转是三行)
如果流量不大,用 rinet 最简单了,一行配置
WordTian
2019-06-14 08:38:45 +08:00
除了 iptables 命令,还得一条启用内网转发命令
应该是改 /proc 里的某个文件的值
Admstor
2019-06-14 10:01:05 +08:00
楼上好多回答是认真的吗?
我如果没理解错
楼主需要的是把 B30525 流量转发到 A25565
且没有 B 服务器控制权

在这种情况下,楼主能做的就是在 B 服务器之前的任何路径上镜像 B 服务器所有流量
本质上是黑客行为
warcraft1236
2019-06-14 10:01:33 +08:00
@ihciah 高版本的 Ubuntu 什么的默认是打开内核转发的吧?
mattx
2019-06-14 10:20:22 +08:00
@Admstor #28 你理解反了,看楼主最后描述
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
ae3803
2019-06-14 11:46:38 +08:00
@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
ae3803
2019-06-14 11:53:57 +08:00
给那些不知道我干什么的说下:我在某宝租了台 MC 服务器(面板服,没 ssh 控制权),但是其服务器地址是带端口的,我想用自己的服务器来中转这台服务器的流量同时将端口转发成 25565(即 MC 的默认端口)。
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
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
Rsplwe
2019-06-17 16:28:32 +08:00
@ae3803 既然是 minecraft,不如尝试下用 bungeecord 来转发
z919126592
2019-06-18 00:04:45 +08:00
端口很熟悉 minecraft ?

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

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

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

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

© 2021 V2EX