请教一下这种情况下 iptables 该怎样写 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chunchu
V2EX    问与答

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

  •  
  •   chunchu 2019-08-29 08:18:22 +08:00 3181 次点击
    这是一个创建于 2323 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网络简图见下图:

     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 上这样干过的讨论一下,谢谢!

    24 条回复    2021-06-21 22:15:15 +08:00
    xduanx
        1
    xduanx  
       2019-08-29 08:27:51 +08:00   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  
    OP
       2019-08-29 08:57:04 +08:00
    @xduanx
    非常不好意思,这个问题对懂网络的人来说很简单,但是我搞了好久还是搞不定,我也知道做伸手党是不好的,所以我先找了一本书来看看,再尝试一下。
    Linux Advanced Routing & Traffic Control
    https://lartc.org/
    blackeeper
        3
    blackeeper  
       2019-08-29 09:40:01 +08:00   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  
    OP
       2019-08-29 14:16:35 +08:00
    @blackeeper
    你好!
    树莓派上仅仅开启路由转发模式好像不行吧?如果要添加根据源 IP 的策略路由应该怎样写啊?
    blackeeper
        5
    blackeeper  
       2019-08-29 15:13:45 +08:00   1
    @chunchu
    树莓派上你需要添加默认路由到 10.0.2.251 ,添加命令如下:
    ip route add default via 10.0.2.251
    你这个拓扑很简单,不需要写啥策略路由
    xduanx
        6
    xduanx  
       2019-08-29 17:59:29 +08:00   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  
    OP
       2019-08-29 21:47:09 +08:00
    @blackeeper @xduanx

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

    ```
    pi@Pi:~ $ 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  
       2019-08-29 22:07:27 +08:00
    不能联网正常啊,因为你修改了他的默认路由,而且有可能 10.0.2.251 的 metric 比另外 2 条默认路由高
    你发的路由表现在是在的路由表是正常的,在预料范围捏
    xduanx
        9
    xduanx  
       2019-08-29 22:08:28 +08:00
    你就用策略路由吧,不要用默认路由了,6 层所写的那样
    xduanx
        10
    xduanx  
       2019-08-29 22:11:27 +08:00
    8 层说错了,metric 越小,优先级越高
    xduanx
        11
    xduanx  
       2019-08-29 22:12:46 +08:00
    删掉刚刚添加的默认路由方式 2 中
    1,重启
    2,ip route del default via 10.0.2.251
    xduanx
        12
    xduanx  
       2019-08-29 22:15:59 +08:00   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  
    OP
       2019-08-30 08:05:03 +08:00
    @xduanx
    现在的情况是,C(VPS)上运行没有问题,树莓派上运行策略路由
    ip route add default via 10.0.2.251 table 1000
    树莓派就卡住了,网络就断了,需要重启树莓派才行,感觉策略路由添加不上,但是直接添加默认路由可以添加上,可以 ssh 登陆到树莓派,但是 ping 外网不通。这个问题很奇怪。
    chunchu
        14
    chunchu  
    OP
       2019-08-30 08:09:33 +08:00
    我怀疑是不是树莓派系统的问题,我安装的是 Raspbian 9 stretch.
    xduanx
        15
    xduanx  
       2019-08-30 08:22:41 +08:00 via iPhone
    ip rule list 看下输出
    ip route show table 1000 看下输出
    xduanx
        16
    xduanx  
       2019-08-30 08:47:42 +08:00
    用默认路由办法如下
    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  
       2019-08-30 08:50:04 +08:00
    不是我吹牛逼,你这个小项目,我在公司连续干了一年,每天就是翻来覆去改这些东西
    所以,你这个不伦什么刁钻的问题,截图就行了
    xduanx
        18
    xduanx  
       2019-08-30 08:52:49 +08:00
    你这个除了 tinc 还有其他多选
    gre/vxlan/l2tp over ipsec
    wireguard
    openvpn
    单纯的 ipsec
    chunchu
        19
    chunchu  
    OP
       2019-08-30 09:10:12 +08:00
    @xduanx

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

    pi@Pi:~ $ 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  
       2019-08-30 09:17:21 +08:00
    哈哈,都可以,随便你怎么折腾,我都能搞得定;
    我也没怀疑自己的能力,只是在 V 站这个大神聚集的地方看到了可以露脸的机会,
    情不自禁的想吹一波牛逼
    chunchu
        21
    chunchu  
    OP
       2019-08-30 09:20:24 +08:00
    @xduanx
    我先自己弄一下,万一还是搞不定再来请教你,谢谢了!
    chunchu
        22
    chunchu  
    OP
       2019-09-02 17:42:59 +08:00
    Padawan
        23
    Padawan  
       2020-03-15 21:49:02 +08:00
    @xduanx
    hello, 我遇到了类似但略有不同的问题, 能不能请你帮看一下应该怎么解决?

    LAN:
    192.168.1.0/24

    树莓派:
    eth0: 192.168.1.2
    Wireguard 虚拟网卡: 192.168.3.1

    LAN 网关:
    192.168.1.1

    网络是
    LAN 网关->光猫->WAN

    现在树莓派上做的透明代理设置可以正常工作. 但是作为 Wireguard 服务器, 外面连进来的客户端无法访问 LAN 也无法访问互联网. 是需要增加路由设置吗?

    我如果把 ip route add local 0.0.0.0/0 dev lo table 100 去掉, Wireguard 客户端连进来后可以访问 192.168.3.1,但是无法访问 WAN.

    我需要做什么改动才能保持透明代理的同时让 Wireguard 客户端接入后也能访问 LAN 和 WAN 呢?

    透明代理是通过写在 /etc/rc.local 里的
    ip rule add fwmark 1 table 100
    ip route add local 0.0.0.0/0 dev lo table 100
    ...


    以下是我设上透明代理和 Wireguard 后的配置.

    # ip route list table main
    default via 192.168.1.1 dev eth0 src 192.168.1.2 metric 202
    192.168.1.0/24 dev eth0 proto dhcp scope link src 192.168.1.2 metric 202
    192.168.3.0/24 dev wg0 proto kernel scope link src 192.168.3.1

    # ip route list table 100
    local default dev lo scope host

    # ip rule list
    0: from all lookup local
    32765: from all fwmark 0x1 lookup 100
    32766: from all lookup main
    32767: from all lookup default
    yanshibin
        24
    yanshibin  
       2021-06-21 22:15:15 +08:00
    @xduanx 您好,我有遇到类似的问题,能否付费请教下,留个联系方式
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3791 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 04:14 PVG 12:14 LAX 20:14 JFK 23:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86