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

请教 iptables 为某些 ip 段单独做 跳板 的配置办法

  •  
  •   yongw520 · 2018-02-22 01:37:01 +08:00 · 4721 次点击
    这是一个创建于 2471 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看了半天文章,实在搞不懂。。。遂来求教

    需求:
    A 为跳板 111.111.111.111
    B 为目标主机 222.222.222.222

    A 作为日常使用代理,但不能访问某网站。
    而 B 流量少,链路差,但可以访问某网站。
    需求是 A 作代理访问某网站的 IP 段时(已知),转发至 B.

    查到如下全部转发的办法,尝试了下可以正常工作。
    iptables -t nat -A PREROUTING -p tcp --dport A 的端口 -j DNAT --to-destination B 的 IP:B 的端口
    iptables -t nat -A POSTROUTING -p tcp -d B 的 IP --dport B 的端口 -j SNAT --to-source A 的 IP
    iptables -t nat -A PREROUTING -p udp --dport A 的端口 -j DNAT --to-destination B 的 IP:B 的端口
    iptables -t nat -A POSTROUTING -p udp -d B 的 IP --dport B 的端口 -j SNAT --to-source A 的 IP
    7 条回复    2018-04-06 09:46:56 +08:00
    defunct9
        1
    defunct9  
       2018-02-22 04:31:18 +08:00 via iPhone
    如上的例子用 nginx 来做岂不是更好一些
    Geoion
        2
    Geoion  
       2018-02-22 05:11:47 +08:00
    没看太懂,但是好像 qtunnel 能满足需求
    msg7086
        3
    msg7086  
       2018-02-22 06:50:24 +08:00   ❤️ 2
    前几天刚刚做过类似的配置。
    我们的场景是,A 要访问某个主机 C,但是由于某些原因 C 把 A 的流量 block 了,于是需要用 B 中转。

    B 机
    iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source B 机 IP
    iptables -A FORWARD -i eth0 -o eth0 -s A 机 IP -j ACCEPT
    iptables -A FORWARD -i eth0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

    A 机
    ip r add C 机 IP/32 dev eth0 via B 机 IP

    当然我们是内网环境,所以没有加额外的保护,你用的话应该要加上 IP 限定。
    但是反正就是 SNAT 的事情。
    mingl0280
        4
    mingl0280  
       2018-02-22 10:37:35 +08:00
    你这个需求在本地做 PAC 代理规则比较好……因为是 HTTP/HTTPS,iptables 起来比较烦,因为有各种 CDN 啊什么的
    如果非要搞的话
    -t nat -A PREROUTING -d [final_target_addr] -p tcp --dport [final-target-port] -j DNAT --to-destination [B-addr]:[B-port] #去程的包转发到跳板机
    -t nat -A POSTROUTING -s [source_addr] -o [income_netdevice] -j MASQUERADE #返回的包让他自动搞去
    scegg
        5
    scegg  
       2018-02-22 10:58:21 +08:00
    直接加个 route 不就好了。。。
    debian 语法:
    route add -net 1.2.3.0/24 gw gateway.ip.address
    yongw520
        6
    yongw520  
    OP
       2018-02-22 21:10:37 +08:00
    感谢提供帮助的各位, 最终使用 shadowsocks-libev-redir 并配合 iptables 与 ipset 再做了层代理.
    参考了该思路: https://medium.com/@terrancesiu/rixcloud%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5-cf9d828f82fd
    Abby11
        7
    Abby11  
       2018-04-06 09:46:56 +08:00
    @yongw520 请问你有碰到这个问题么?如何解决?
    # whois -h riswhois.ripe.net -- '-i origin AS14618' | grep "route: " | awk '{print $NF}' | sort | /usr/local/sbin/listclean.sh >>/root/as14618.txt
    -bash: /usr/local/sbin/listclean.sh: Permission denied

    我用了 chmod 777 还是不行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3450 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 00:42 · PVG 08:42 · LAX 16:42 · JFK 19:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.