请问如何中转一个没有控制台权限的服务器的 TCP 流量? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
div class="sep20">
ae3803
V2EX    宽带症候群

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

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

    我想用 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  
    PRO
       2019-06-13 23:48:49 +08:00 via iPhone
    这 iptables 转发就行了啊
    Tink
        5
    Tink  
    PRO
       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
    h3n6Qx2UB9a4g477
        36
    h3n6Qx2UB9a4g477  
       2019-06-17 16:28:32 +08:00 via Android
    @ae3803 既然是 minecraft,不如尝试下用 bngeecord 来转发
    Apllex
        37
    Apllex  
       2019-06-18 00:04:45 +08:00 via Android
    端口很熟悉 minecraft ?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     968 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 22:23 PVG 06:23 LAX 15:23 JFK 18:23
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86