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

路由能 iptables 某个机器所有数据到另一个机器的某端口么?

  •  1
     
  •   1314258 · 2014-08-11 10:57:09 +08:00 · 5890 次点击
    这是一个创建于 3761 天前的主题,其中的信息可能已经有所发展或是发生改变。
    基本:
    路由设备 openwrt的路由一个 ip为192.168.1.1
    透明设备 一个运行了ss-redir类似的设备,透明代理端口为9040 ip为192.168.1.2
    无知用户 一个需要全局翻寡妇王而无感觉的用户。ip为192.168.1.3

    我的做法
    路由设备 iptables -t nat -A PREROUTING -s 192.168.1.3 -p tcp --syn -j DNAT --to-destination 192.168.1.2:9040

    但无知用户貌似还是上不了网。望指正。

    @extreme @onemoo @letitbesqzr
    怕帖子0回复,特地at些人回复一下,其他ver认识的,指教一下。
    11 条回复    2014-08-14 16:29:12 +08:00
    ryd994
        1
    ryd994  
       2014-08-11 14:30:25 +08:00   ❤️ 1
    我iptables学得不多,先抛个砖……
    你只转发syn大概不行吧,把 --syn 去了。
    如果只是要代理劫持的话,可以古狗 iptables transparent proxy
    比如: http://www.tldp.org/HOWTO/TransparentProxy-6.html
    s7lx
        2
    s7lx  
       2014-08-11 15:03:08 +08:00   ❤️ 2
    可以。

    我的方案效果和你想通,但思路不太一样,如下:
    局域网内有家用路由器192.168.2.1,肩负网关、DHCP等众多任务
    运行了一个192.168.2.5的Debian,内有ss-redir一个
    所有用户DHCP获取192.168.2.0/24 其他的IP地址,要求完全透明的翻墙。

    首先在DHCP上配置DNS和网关地址为192.168.2.5,这样所有人的数据默认都会先发到这台设备上,DNS也会从这里解析(DNS如何避免污染另谈)
    接着打开192.168.2.5上的IPv4数据转发
    sudo echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
    sudo sysctl -p
    这样所有的数据都从192.168.2.5这里通过了,这是科学上网的基础:让所有数据通过那台设备走。
    确保192.168.2.5的下一跳是192.168.2.1 直接在/etc/network/interfaces里直接指定
    iface eth0 inet static
    address 192.168.2.5
    netmask 255.255.255.0
    gateway 192.168.2.1

    确保结果如下
    ===============
    $ traceroute www.sina.com.cn
    traceroute: Warning: www.sina.com.cn has multiple addresses; using 58.63.236.37
    traceroute to ara.sina.com.cn (58.63.236.37), 64 hops max, 52 byte packets
    1 192.168.2.5 (192.168.2.5) 1.645 ms 1.134 ms 1.077 ms
    2 192.168.2.1 (192.168.2.1) 1.541 ms 1.496 ms 1.349 ms
    以下省略
    ===============

    然后启动ss-redir到12345端口
    接着
    sudo iptables -t nat -N SHADOWSOCKS
    sudo iptables -t nat -A SHADOWSOCKS -p tcp -d 8.8.8.0/24 -j REDIRECT --to-ports 12345
    sudo iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
    sudo iptables -t nat -A OUTPUT -p tcp -j SHADOWSOCKS

    这样所有访问8.8.8.0/24的数据都走Debian的12345端口的shadowsocks了,其他数据继续走到192.168.2.1,然后到公网。
    tmqhliu
        3
    tmqhliu  
       2014-08-11 15:58:27 +08:00   ❤️ 1
    全局翻的话直接添加默认路由即可,用不着那么麻烦
    1314258
        4
    1314258  
    OP
       2014-08-11 16:24:13 +08:00
    @tmqhliu 那是怎么搞呢?伸手党请教了。
    1314258
        5
    1314258  
    OP
       2014-08-11 18:00:21 +08:00
    @ryd994 单单去了貌似不行
    onemoo
        6
    onemoo  
       2014-08-13 09:01:03 +08:00   ❤️ 1
    @1314258
    肯定不能只传递syn数据包,所以--syn一定要去掉。但是你说这样还不行,我也搞不懂了。

    咱们来一起分析一下数据流的路径:
    局域网中的192.168.1.3和192.168.1.2是可以直接互访的,但你为了让192.168.1.3能直接无感翻墙,所以在路由(网关)上,把它的外联数据包都重定向给192.168.1.2的ss-redir服务,而当数据返回192.168.1.2时,它应该可以直接把数据包送回192.168.1.3的,所以按说在路由上只有这一个iptables配置就够了。

    要么就是我对网络拓扑的理解不对,要么就是哪里还有问题:
    192.168.1.3是所有网站都不能上吗?还是某些网站不能翻?
    如果是某些网站不能翻,你确定解决DNS问题了吗?
    你说的192.168.1.2上面运行的是类ss-redir设备,运行的是不是ss-redir?
    1314258
        7
    1314258  
    OP
       2014-08-13 18:43:09 +08:00
    @onemoo 是192.168.1.3所有网站都不能上了。
    192.168.1.2运行的不是ss-redir,是tor的transport功能。

    道理上来说,这个iptables应该是没问题的了。
    onemoo
        8
    onemoo  
       2014-08-14 09:23:28 +08:00
    @1314258
    我不太清楚tor的工作方式,也许问题出在它这里。
    抱歉啦,帮不了你了。
    1314258
        9
    1314258  
    OP
       2014-08-14 13:05:02 +08:00   ❤️ 1
    1314258
        10
    1314258  
    OP
       2014-08-14 13:55:54 +08:00
    @s7lx 终于采取了你这种方案。


    @onemoo 我估计是redirect和DNAT --to-destination不是一样的功能。
    @ryd994
    @tmqhliu

    感谢以上各位了。
    onemoo
        11
    onemoo  
       2014-08-14 16:29:12 +08:00
    @1314258
    原来是这样。
    我只考虑了数据包可以回到192.168.1.3,没想到回来的那个握手包的源地址已经不是发送时的目的地址了,所以会被直接忽略掉。
    也许你也可以像那个帖子中说的,把代理设备放到另一个子网中,当然前提是路由器能够再划分一个子网出来。

    2L的办法是不是因为已经设置代理设备为网关了,所以数据本来就从那里走,就没有这些问题了?(来去数据的路径一样)
    redirect除了只能改变目标端口外,没有更多的作用了吧?

    怪不得通常的办法是直接在路由器上运行这类服务呢,就没有这些问题了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3019 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:51 · PVG 22:51 · LAX 06:51 · JFK 09:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.