• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zjsxwc
V2EX  ›  程序员

如何转发 tcp 请求到另一个 ip 地址?

  •  
  •   zjsxwc ·
    zjsxwc · Jan 17, 2018 · 7544 views
    This topic created in 3125 days ago, the information mentioned may be changed or developed.

    比如在我程序看来是对 ip 地址 A 创建了个 tcp 连接,但实际上是对 ip 地址 B 创建了个 tcp 连接,这应该怎么实现? Linux C 有例子吗?

    Supplement 1  ·  Jan 17, 2018
    有学习的代码了: https://github.com/rssnsj/portfwd
    18 replies    2018-01-18 03:31:47 +08:00
    wellsc
        1
    wellsc  
       Jan 17, 2018
    NGINX
    ThirdFlame
        2
    ThirdFlame  
       Jan 17, 2018
    端口映射?
    clino
        4
    clino  
       Jan 17, 2018
    除了端口映射, socks 代理是不是也是做到这种效果?
    dushixiang
        5
    dushixiang  
       Jan 17, 2018
    iptables nat
    ysc3839
        6
    ysc3839  
       Jan 17, 2018 via Android
    @clino 是。但是程序先得告诉服务器要连接的地址,不能做到楼主这种效果。
    h4lbhg1G
        7
    h4lbhg1G  
       Jan 17, 2018
    @FreeEx nat 是不是只能转内网 IP,公网 IP->公网 IP 有效么?
    pimin
        8
    pimin  
       Jan 17, 2018 via Android
    端口转发应该是效率最高的
    wangking
        9
    wangking  
       Jan 17, 2018
    ssh 和 iptables 都是有转发功能
    lianxiaoyi
        10
    lianxiaoyi  
       Jan 17, 2018
    apt-get install rinetd
    vim /etc/rinetd.conf
    0.0.0.0 3706 xxx.xxx.xxx.xxx 3306
    :wq
    rinetd /etc/rinetd.conf
    azh7138m
        11
    azh7138m  
       Jan 17, 2018
    @h4lbhg1G 有啊.....
    likuku
        12
    likuku  
       Jan 17, 2018
    haproxy 的 tcp 连接模式
    conn4575
        13
    conn4575  
       Jan 17, 2018 via Android
    haproxy+1
    zjsxwc
        14
    zjsxwc  
    OP
       Jan 17, 2018
    看了代码原来就是借助 epoll 代理转发,不断的 recv 与 send 数据:

    https://github.com/rssnsj/portfwd/blob/master/src/tcpfwd.c#L433

    https://github.com/rssnsj/portfwd/blob/master/src/tcpfwd.c#L444
    LGA1150
        15
    LGA1150  
       Jan 17, 2018
    在本机上执行
    iptables -t nat -I OUTPUT -p tcp -d 地址 A --dport 端口 -j DNAT --to 地址 B
    xiaoz
        16
    xiaoz  
       Jan 17, 2018
    wwqgtxx
        17
    wwqgtxx  
       Jan 17, 2018 via iPhone   ❤️ 1
    如果要看 userspace 的实现,下面的写的也不错
    https://github.com/wangyu-/tinyPortMapper
    如果要效率高,还是用 iptables 的 nat 转发
    eaglexiang
        18
    eaglexiang  
       Jan 18, 2018   ❤️ 1
    @clino socks5 能实现你要的效果,但数据报需要按照 socks5 的协议封装。
    见: https://www.eaglexiang.org/socks5-chinese
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2627 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 15:32 · PVG 23:32 · LAX 08:32 · JFK 11:32
    ♥ Do have faith in what you're doing.