V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
vinsony
V2EX  ›  Linux

能用 iptables 把流量转发到另一台机器的某个端口吗?

  •  
  •   vinsony · 2021-01-14 16:53:00 +08:00 · 7121 次点击
    这是一个创建于 1409 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是这样,主路由是个 openwrt,IP 192.168.1.1,另外一台机器 192.168.1.2 上开了个 dokodemo-door,端口是 12345 。

    现在想让路由器把流量都转发到 192.168.1.2:12345 上。参考网上透明代理的 iptables 规则,好像都是转发给本地端口,我尝试过转发给另外的机器,不成功。

    我不想把网关改到 192.168.1.2 上,不知道能不能做这样的转发?
    22 条回复    2022-08-06 21:50:03 +08:00
    eason1874
        1
    eason1874  
       2021-01-14 16:56:40 +08:00
    iptables 能做端口转发。我曾经用这个转发梯子流量实现加速,但是我忘记怎么写了。

    楼下请:
    richzhu
        2
    richzhu  
       2021-01-14 16:59:28 +08:00
    下面是我用 iptables 做的 SNAT

    -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 192.168.0.150

    具体也可以百度一下 SNAT 的配置
    111111111111
        3
    111111111111  
       2021-01-14 17:01:27 +08:00
    我猜 !# 说的是这个

    sudo su
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A PREROUTING -p tcp --dport 8388 -j DNAT --to-destination US_VPS_IP:8388
    iptables -t nat -A POSTROUTING -p tcp -d US_VPS_IP --dport 8388 -j SNAT --to-source JAPAN_VPS_IP


    https://github.com/shadowsocks/shadowsocks/wiki/Setup-a-Shadowsocks-relay
    xx6412223
        4
    xx6412223  
       2021-01-14 17:03:16 +08:00
    用 SSH Tunneling 也行
    Jirajine
        5
    Jirajine  
       2021-01-14 17:04:15 +08:00 via Android
    你这样转发,就得考虑流量回环问题。
    nbweb
        6
    nbweb  
       2021-01-14 17:08:13 +08:00
    给你另一个方案

    192.168.1.2:做透明代理,再多做一步,加个 dns 服务器
    192.168.1.1:openwrt 的主路由,把 dns 服务器和网关设置为 192.168.1.2
    以上完美解决,不用转发啊,我家现在就是这么搞的,相当于 192.168.1.2 是网关。

    dnsmasq-full 配合 ipset 可以实现墙内外分流,墙外的走透明网关,墙内的直接走路由器出去。
    vinsony
        7
    vinsony  
    OP
       2021-01-14 17:11:43 +08:00
    感觉 SNAT 貌似可行,晚上试一下,谢谢。
    vinsony
        8
    vinsony  
    OP
       2021-01-14 17:15:45 +08:00
    @nbweb 你是在 DHCP 下发的时候,给其他电脑设置这个 dns 服务器和网关吗?
    rihkddd
        9
    rihkddd  
       2021-01-14 17:16:35 +08:00
    # 转发脚本内容 tcpproxy.sh
    ----------
    #!/bin/sh
    # TCP Proxy using IPTables
    echo 1 > /proc/sys/net/ipv4/ip_forward


    # Flush nat table
    iptables -t nat -F

    # tcpproxy LOCAL_IP LOCAL_PORT REMOTE_IP REMOTE_PORT

    function tcpproxy {
    iptables -t nat -A PREROUTING --dst $1 -p tcp --dport $2 -j DNAT --to-destination $3:$4
    iptables -t nat -A POSTROUTING --dst $3 -p tcp --dport $4 -j SNAT --to-source $1
    iptables -t nat -A OUTPUT --dst $1 -p tcp --dport $2 -j DNAT --to-destination $3:$4
    }
    ------------

    # 使用方法
    tcpproxy.sh 192.168.1.1 12345 192.168.1.2 12345
    deorth
        10
    deorth  
       2021-01-14 17:17:04 +08:00
    不行,我试过了。跨机器透明代理流量转发会导致原目的地址丢失
    deorth
        11
    deorth  
       2021-01-14 17:17:33 +08:00
    只能更改 dhcp 分配的网关
    ziseyinzi
        12
    ziseyinzi  
       2021-01-14 17:24:30 +08:00
    10 楼+1,目前 iptables 做不到,nftable 记得有能做到的设计,但是还没实现。
    nbweb
        13
    nbweb  
       2021-01-14 17:32:33 +08:00
    @vinsony 不是,其它电脑自动获取 ip 时,网关和 dns 就是透明网关的地址。
    pheyx
        14
    pheyx  
       2021-01-14 20:00:22 +08:00
    iptables 和 iproute 搭配可以实现。看 https://tldp.org/HOWTO/TransparentProxy-6.html 这里的第 2 种方法。
    pheyx
        15
    pheyx  
       2021-01-14 20:06:16 +08:00
    这种方法不用修改网关,原理是把去往 12345 端口的流量打上标记,然后设定 ip rule 使这些流量走另一个路由表到达运行代理的设备。
    linvon
        16
    linvon  
       2021-01-14 20:19:25 +08:00
    #14 #15 可解,iptables 打 mark,增加路由表改路由
    但你全部流量都转发,和改网关又有什么区别呢
    zictos
        17
    zictos  
       2021-01-14 20:29:36 +08:00
    可以使用 haproxy,iptables 试了不稳定
    qwerthhusn
        18
    qwerthhusn  
       2021-01-14 21:45:51 +08:00
    用 HAProxy 吧,甚至 Nginx 的 stream 代理都行
    Ehco1996
        19
    Ehco1996  
       2021-01-15 07:10:35 +08:00
    有个简单的命令行工具

    https://github.com/Ehco1996/ehco

    推荐试试
    julyclyde
        20
    julyclyde  
       2021-01-15 11:45:25 +08:00
    SNAT+DNAT 可以。haproxy/nginx 也可以。不过会丢失原始的客户端 IP
    如果要保留,可以尝试 LVS FullNAT 模式+toa 模块
    laqow
        21
    laqow  
       2021-01-15 15:38:01 +08:00
    在 openwrt 上装 dokodemo-door
    customer
        22
    customer  
       2022-08-06 21:50:03 +08:00
    这么多楼居然没人提 redsocks ,专门做代理转发的老牌工具,不过家用路由器上跑的话流量大起来 cpu 占用还挺高的,我之前 200M 宽带都跑不满,最后只好在路由上做白名单,只转发必要的流量
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2354 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 01:54 · PVG 09:54 · LAX 17:54 · JFK 20:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.