V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ae3803
V2EX  ›  宽带症候群

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

  •  
  •   ae3803 · 2019-06-13 23:10:45 +08:00 · 4081 次点击
    这是一个创建于 2017 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    在这种情况下,楼主能做的就是在 B 服务器之前的任何路径上镜像 B 服务器所有流量
    本质上是黑客行为
    warcraft1236
        29
    warcraft1236  
       2019-06-14 10:01:33 +08:00
    @ihciah 高版本的 Ubuntu 什么的默认是打开内核转发的吧?
    mattx
        30
    mattx  
       2019-06-14 10:20:22 +08:00 via iPhone
    @Admstor #28 你理解反了,看楼主最后描述
    mattx
        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
    ae3803
        32
    ae3803  
    OP
       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
        33
    ae3803  
    OP
       2019-06-14 11:53:57 +08:00
    给那些不知道我干什么的说下:我在某宝租了台 MC 服务器(面板服,没 ssh 控制权),但是其服务器地址是带端口的,我想用自己的服务器来中转这台服务器的流量同时将端口转发成 25565(即 MC 的默认端口)。
    mattx
        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
    aru
        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
    Rsplwe
        36
    Rsplwe  
       2019-06-17 16:28:32 +08:00 via Android
    @ae3803 既然是 minecraft,不如尝试下用 bungeecord 来转发
    z919126592
        37
    z919126592  
       2019-06-18 00:04:45 +08:00 via Android
    端口很熟悉 minecraft ?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2794 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 03:13 · PVG 11:13 · LAX 19:13 · JFK 22:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.