ae3803

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

  •  
  •   ae3803 · Jun 13, 2019 · 5266 views
    This topic created in 2708 days ago, the information mentioned may be changed or developed.

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

    37 replies  •  2019-06-18 00:04:45 +08:00
    billlee
    billlee
    Jun 13, 2019
    1
    路由劫持?
    unixeno
    unixeno
    Jun 13, 2019 via Android
    2
    你在 a 上跑一个 tcp 转发的不就好了
    然后连 a 服务器的 25565 端口
    ae3803
    ae3803
    OP
    Jun 13, 2019
    3
    @unixeno 用什么程序?没有 B 服务器的控制台权限
    Tink
    Tink
    Jun 13, 2019 via iPhone
    4
    这 iptables 转发就行了啊
    Tink
    Tink
    Jun 13, 2019 via iPhone
    5
    iptables -t nat -A PREROUTING -p tcp --dport 25565 -j DN AT --to-destination ip:30525
    ae3803
    ae3803
    OP
    Jun 13, 2019
    6
    @Tink iptables 转发详细命令是什么?不会用 iptables
    ae3803
    ae3803
    OP
    Jun 13, 2019
    7
    @Tink 哦,我试试
    ae3803
    ae3803
    OP
    Jun 13, 2019
    8
    @Tink 直接执行这个命令就可以了?
    ae3803
    ae3803
    OP
    Jun 13, 2019
    9
    @Tink 为什么我试了没有用啊
    MonoLogueChi
    MonoLogueChi
    Jun 13, 2019 via Android
    10
    在 A 服务器上跑个 Nginx,监听 25565 端口的 TCP,然后转发到 B 服务器的 30525 端口上,类似于反向代理
    unixeno
    unixeno
    Jun 14, 2019 via Android
    11
    @ae3803 你 ip 改了吗。。。
    ae3803
    ae3803
    OP
    Jun 14, 2019
    12
    ip 肯定改了啊
    ae3803
    ae3803
    OP
    Jun 14, 2019
    13
    我是要用 A 服务器的 25565 端口来转发 B 服务器的 30525 端口的 TCP
    ae3803
    ae3803
    OP
    Jun 14, 2019
    14
    这是我用的命令 iptables -t nat -A PREROUTING -p tcp --dport 25565 -j DNAT --to-destination 222.187.xxx.xxx:30525
    @Tink @unixeno 试了没反应,iptables -L 也查不到
    ae3803
    ae3803
    OP
    Jun 14, 2019
    15
    系统是 Debian9
    Hardrain
    Hardrain
    Jun 14, 2019
    16
    在 A 上使用 /运行
    1. iptables
    如果需要更复杂的功能,比如 filter/load-balancing 等
    2. haproxy
    3. 简单的 TCP 转发似乎也可以靠 nginx 的 stream module
    ae3803
    ae3803
    OP
    Jun 14, 2019 via Android
    17
    @Hardrain 有没有详细的方法?
    wtks1
    wtks1
    Jun 14, 2019 via Android
    18
    如果只是 tcp,可以在别的设备上编译一个 rinetd,然后传到目标设备上使用
    hlz0812
    hlz0812
    Jun 14, 2019 via iPhone
    19
    iptables 转发,不会命令自己查一键脚本,脚本都不会用就没办法了
    unknowncheater
    unknowncheater
    Jun 14, 2019
    20
    回去补充 iptables 知识后再来发帖
    likuku
    likuku
    Jun 14, 2019
    21
    数据流向,访问流向,先表达清楚。
    ihciah
    ihciah
    Jun 14, 2019 via iPad
    22
    你这需求就是普通端口转发 rinetd 最省事,当然 socat 这种也行,iptables 性能比较好,其实你可以直接写 REDIRECT 的,记得打开内核转发
    ZRS
    ZRS
    Jun 14, 2019
    23
    socat
    ech0x
    ech0x
    Jun 14, 2019 via iPhone
    24
    socat 和 iptables 都行,我也推荐 iptables。
    zk123
    zk123
    Jun 14, 2019 via iPhone
    25
    对 B 服务器没有控制权,凭啥让人家好好的流量走你的 A 服务器.....
    dszhblx
    dszhblx
    Jun 14, 2019 via iPhone
    26
    iptables 也就两行命令(本机也转是三行)
    如果流量不大,用 rinet 最简单了,一行配置
    WordTian
    WordTian
    Jun 14, 2019 via Android
    27
    除了 iptables 命令,还得一条启用内网转发命令
    应该是改 /proc 里的某个文件的值
    Voren
    Voren
    Jun 14, 2019
    28
    楼上好多回答是认真的吗?
    我如果没理解错
    楼主需要的是把 B30525 流量转发到 A25565
    且没有 B 服务器控制权

    在这种情况下,楼主能做的就是在 B 服务器之前的任何路径上镜像 B 服务器所有流量
    本质上是黑客行为
    daiqiangbudainiu
    daiqiangbudainiu
    Jun 14, 2019
    29
    @ihciah 高版本的 Ubuntu 什么的默认是打开内核转发的吧?
    mattx
    mattx
    Jun 14, 2019 via iPhone
    30
    @Admstor #28 你理解反了,看楼主最后描述
    mattx
    mattx
    Jun 14, 2019
    31
    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
    ae3803
    OP
    Jun 14, 2019
    32
    @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
    ae3803
    OP
    Jun 14, 2019
    33
    给那些不知道我干什么的说下:我在某宝租了台 MC 服务器(面板服,没 ssh 控制权),但是其服务器地址是带端口的,我想用自己的服务器来中转这台服务器的流量同时将端口转发成 25565(即 MC 的默认端口)。
    mattx
    mattx
    Jun 14, 2019
    34
    @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
    aru
    Jun 17, 2019
    35
    socat / haproxy / nginx 都可以在非 root 权限下完成你的需求,性能上 socat 会比较弱一点
    nohup socat TCP-LISTEN: 25565,fork,reuseaddr TCP:serverB-ip: 30525
    h3n6Qx2UB9a4g477
    h3n6Qx2UB9a4g477
    Jun 17, 2019 via Android
    36
    @ae3803 既然是 minecraft,不如尝试下用 bungeecord 来转发
    Apllex
    Apllex
    Jun 18, 2019 via Android
    37
    端口很熟悉 minecraft ?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4329 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 67ms · UTC 09:10 · PVG 17:10 · LAX 01:10 · JFK 04:10
    ♥ Do have faith in what you're doing.