首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
chunchu
V2EX  ›  问与答

请教一下这种情况下 iptables 该怎样写

  •  
  •   chunchu · 149 天前 · 991 次点击
    这是一个创建于 149 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网络简图见下图:

         A                B(Raspberry Pi)              C(VPS)         
    192.168.0.*   <--->   192.168.0.112          111.111.111.111   <--->   Internet
                            10.0.2.60     <--->     10.0.2.251
                               tinc                    tinc
    

    A(PC):

    • 192.168.0.*(内网)

    B(Raspberry Pi):

    • 192.168.0.112(内网)
    • 10.0.2.60(tinc)

    C(VPS):

    • 111.111.111.111(公网)
    • 10.0.2.251(tinc)

    A(PC)与 B(Raspberry Pi)同属 192.168.0.0/24,B(Raspberry Pi)与 C(VPS)通过 tinc 连接,现在想要实现的效果是:A(PC)将网关设置 192.168.0.112 ,所有流量经过 B(Raspberry Pi),然后流量通过 tinc 到达 C(VPS)出口。这样考虑的原因主要是因为 tinc 比较稳定,使用的人也比较少。网络上有使用 OpenVPN 这样干的,但是 OpenVPN 与 tinc 还是稍有差异。V2EX 上这样干过的讨论一下,谢谢!

    22 回复  |  直到 2019-09-02 17:42:59 +08:00
    xduanx
        1
    xduanx   149 天前   ♥ 1
    这个问题再简单不过了
    1,树莓派上启用路由转发;树莓派上指默认路由到 VPS 的 10.0.2.251 上;如果默认路由不方便,那就写根据源 IP 的策略路由
    2,VPS 上在 111.111.111.111 上写 nat 规则; VPS 写 192.168.0.0 的回城路由,指向 10.0.2.60
    chunchu
        2
    chunchu   149 天前
    @xduanx
    非常不好意思,这个问题对懂网络的人来说很简单,但是我搞了好久还是搞不定,我也知道做伸手党是不好的,所以我先找了一本书来看看,再尝试一下。
    Linux Advanced Routing & Traffic Control
    https://lartc.org/
    blackeeper
        3
    blackeeper   149 天前   ♥ 1
    1 楼说的很正确,我来补上命令吧
    在树莓派上和 C(VPS)编辑文件:/etc/sysctl.conf,添加如下一行,开启路由转发模式
    net.ipv4.ip_forward = 1
    执行命令:sysctl -p /etc/sysctl.conf
    在 C(VPS)上执行:
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
    ip route add 192.168.0.0/24 via 10.0.2.60
    chunchu
        4
    chunchu   149 天前
    @blackeeper
    你好!
    树莓派上仅仅开启路由转发模式好像不行吧?如果要添加根据源 IP 的策略路由应该怎样写啊?
    blackeeper
        5
    blackeeper   148 天前   ♥ 1
    @chunchu
    树莓派上你需要添加默认路由到 10.0.2.251 ,添加命令如下:
    ip route add default via 10.0.2.251
    你这个拓扑很简单,不需要写啥策略路由
    xduanx
        6
    xduanx   148 天前   ♥ 1
    不请自来
    源 IP 策略路由
    ip rule add from 192.168.0.0/24 table 1000
    ip route add default via 10.0.2.251 table 1000

    (其中 1000 这个数字随便写,写 20 也行)
    chunchu
        7
    chunchu   148 天前
    @blackeeper @xduanx

    在树莓派上添加 ip route add default via 10.0.2.251 后不能联网了,查看路由表出现很奇怪的情况,tinc 本身在路由表中添加了两条

    ```
    [email protected]:~ $ route -n
    Kernel IP routing table
    Destination Gateway Genmask Flags Metric Ref Use Iface
    0.0.0.0 10.0.2.251 0.0.0.0 UG 0 0 0 tinc
    0.0.0.0 192.168.0.1 0.0.0.0 UG 202 0 0 eth0
    0.0.0.0 192.168.0.1 0.0.0.0 UG 303 0 0 wlan0
    10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 tinc
    169.254.0.0 0.0.0.0 255.255.0.0 U 204 0 0 tinc
    192.168.0.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
    192.168.0.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
    ```
    xduanx
        8
    xduanx   148 天前
    不能联网正常啊,因为你修改了他的默认路由,而且有可能 10.0.2.251 的 metric 比另外 2 条默认路由高
    你发的路由表现在是在的路由表是正常的,在预料范围捏
    xduanx
        9
    xduanx   148 天前
    你就用策略路由吧,不要用默认路由了,6 层所写的那样
    xduanx
        10
    xduanx   148 天前
    8 层说错了,metric 越小,优先级越高
    xduanx
        11
    xduanx   148 天前
    删掉刚刚添加的默认路由方式 2 中
    1,重启
    2,ip route del default via 10.0.2.251
    xduanx
        12
    xduanx   148 天前   ♥ 1
    给你命令,直接复制粘贴吧
    1,在树莓派上和 C(VPS)编辑文件:/etc/sysctl.conf,添加如下一行,开启路由转发模式
    net.ipv4.ip_forward = 1
    执行命令:sysctl -p /etc/sysctl.conf

    ,2,启用策略路由
    ip rule add from 192.168.0.0/24 table 1000
    ip route add default via 10.0.2.251 table 1000


    3,在 C(VPS)上执行:
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
    ip route add 192.168.0.0/24 via 10.0.2.60

    基本上就是复制刚刚那位老哥的命令
    chunchu
        13
    chunchu   148 天前
    @xduanx
    现在的情况是,C(VPS)上运行没有问题,树莓派上运行策略路由
    ip route add default via 10.0.2.251 table 1000
    树莓派就卡住了,网络就断了,需要重启树莓派才行,感觉策略路由添加不上,但是直接添加默认路由可以添加上,可以 ssh 登陆到树莓派,但是 ping 外网不通。这个问题很奇怪。
    chunchu
        14
    chunchu   148 天前
    我怀疑是不是树莓派系统的问题,我安装的是 Raspbian 9 stretch.
    xduanx
        15
    xduanx   148 天前 via iPhone
    ip rule list 看下输出
    ip route show table 1000 看下输出
    xduanx
        16
    xduanx   148 天前
    用默认路由办法如下
    ip route add 111.111.111.111/32 via 192.168.0.1
    ip route add default via 10.0.2.251
    xduanx
        17
    xduanx   148 天前
    不是我吹牛逼,你这个小项目,我在公司连续干了一年,每天就是翻来覆去改这些东西
    所以,你这个不伦什么刁钻的问题,截图就行了
    xduanx
        18
    xduanx   148 天前
    你这个除了 tinc 还有其他多选
    gre/vxlan/l2tp over ipsec
    wireguard
    openvpn
    单纯的 ipsec
    chunchu
        19
    chunchu   148 天前
    @xduanx

    ip rule lis 显示已经添加成功了

    [email protected]:~ $ sudo ip rule list
    0: from all lookup local
    32765: from 192.168.0.0/24 lookup 1000
    32766: from all lookup main
    32767: from all lookup default

    我不是怀疑你的能力问题,你给出的代码肯定没有问题,我怀疑是系统的问题。我重新装一下树莓派的系统试试。
    xduanx
        20
    xduanx   148 天前
    哈哈,都可以,随便你怎么折腾,我都能搞得定;
    我也没怀疑自己的能力,只是在 V 站这个大神聚集的地方看到了可以露脸的机会,
    情不自禁的想吹一波牛逼
    chunchu
        21
    chunchu   148 天前
    @xduanx
    我先自己弄一下,万一还是搞不定再来请教你,谢谢了!
    chunchu
        22
    chunchu   144 天前
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1820 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 06:18 · PVG 14:18 · LAX 22:18 · JFK 01:18
    ♥ Do have faith in what you're doing.