V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lemonTreeTop
V2EX  ›  宽带症候群

软路由的最佳实践

  •  3
     
  •   lemonTreeTop · 2023-06-29 14:07:42 +08:00 · 25494 次点击
    这是一个创建于 517 天前的主题,其中的信息可能已经有所发展或是发生改变。

    对多数用户来说,软路由最佳实践应该是透明代理网关,俗称旁路由

    最近在折腾软路由,谈下对软路由看法,软路由当旁路由是由其缺点决定的,缺点包括系统不稳定,网络层能力弱于硬路由。以常见的 openWrt 为例,相比硬路由,出现挂掉的概率更高,硬路由设计时主要针对网络层,在如 NAT 、小包转发上天生就比软路由优秀,软路由则是针对应用层设计的系统,应用层要求更高的通用计算力处理流量,典型应用是代理服务,软路由在这个层面就表现得非常优秀。从网络分层角度看,硬路由和软路由不是同一个层次的东西

    软路由当旁路由使用能很好利用软路由的优点和硬路由的优点,非侵入式接入不影响原有的网络架构

    吐槽下旁路由这个名字太形象了🤣,很中文,放在主路由旁边的路由

    经常看到有人总是想跑满带宽或升级带宽,不明白背后的需求是什么,要求持续高带宽的场景非常少,带宽到达一定速度后边际收益递减,与其追求带宽上的快,不如优化网络延迟,买个延迟更低的机场更香

    第 1 条附言  ·  2023-06-30 11:20:10 +08:00
    我认为的多数用户是有代理服务的需求,但并没有太多网络知识的用户,旁路由是一种折中方案,能兼顾复杂性、稳定性、灵活性

    补充下软路由的稳定性描述,上面就我单表述 openwrt 系统的不稳定是不够准确的,还包括你安装插件服务导致的不稳定,梯子服务的不稳定

    多数用户网络并不是一个人的网络,多数这样的用户如果把软路由当主路由时,他们在折腾网络时能保证一定不影响其他人的网络访问吗,然后你就说搞坏网络就因为他们不会?旁路由你怎么折腾都不影响别人

    我看楼下的回复是来劝退这些用户的吧,你可以以自己的角度认为这是入门方案,但对于多数用户来说旁路由就是最佳实践,这些用户搞更复杂的网络,他们收益其实很低,除了能自娱自乐,回帖秀下优越感之外,对网络改善效果非常少。要是你说能学习网络知识我不评价,开心就好
    142 条回复    2024-06-30 19:43:52 +08:00
    1  2  
    oovveeaarr
        101
    oovveeaarr  
       2023-06-30 15:22:27 +08:00
    @neroxps 加速的 IP 地址不一定是被墙的,被墙的 IP 地址流量也不一定是 TCP/UDP 的,太局限了。
    oovveeaarr
        102
    oovveeaarr  
       2023-06-30 15:26:54 +08:00
    @neroxps 除此之外,FAKE IP 破坏了完整性的同时,也进一步限制了你的代理的网络能力。你的另一条出口网路性能完备的时候,结果就被 FAKE IP 限制了。

    事实上,就算是代理的网络,功能也可能完备,使用策略路由很容易达到相关目的,甚至于仅限端口策略都是很常见的。
    oovveeaarr
        103
    oovveeaarr  
       2023-06-30 15:45:35 +08:00
    @thereone 比较好奇如何避免单点故障的,如果是单条上游链路,主路由断网的同时,“旁路由”也相当于上游被掐断,这样不管 VRRP 还是什么协议都没有用。
    thereone
        104
    thereone  
       2023-06-30 15:53:03 +08:00
    @oovveeaarr 所以你没有看全,意思是旁路由也拨号针对能多拨的宽带用户这样就是双上行到光猫上面或者多条宽带也行 特别是分开用的不做叠加只做主备这种。单宽带不能多拨这个当然备份不了。VRRP 只是在折腾旁路由时完全不影响网络本身加入进来和退出去是无感的。
    seekiss
        105
    seekiss  
       2023-06-30 16:32:21 +08:00 via Android
    其实应该叫代理服务器
    oovveeaarr
        106
    oovveeaarr  
       2023-06-30 16:36:46 +08:00
    @thereone 这样是套了两层及以上 NAT 吗?还是没明白怎么切换网关的。
    oovveeaarr
        107
    oovveeaarr  
       2023-06-30 16:39:28 +08:00
    @oovveeaarr 噢,“旁路由”自己拨号啊。。。。
    Bluecoda
        108
    Bluecoda  
       2023-06-30 17:07:59 +08:00
    @neroxps 感谢解答,我常年挂 bt 的,看来还是硬路由适合我,最多挂个旁路由解决其他问题,现在就是用着一个 ubnt 的硬路由,非常稳定,延迟也很稳
    thereone
        109
    thereone  
       2023-06-30 17:20:56 +08:00
    @oovveeaarr 对没错旁路由自己拨号,实际上也可以当成是双主路由也没有问题不过一般这样做的都是做的主备路由。一个简单场景就是 主路由 A 刷高恪要做流量监控统计要做普通限速但是又做不了过强,于是引入 op 为 B
    AB 之间做 VRRP 流量默认到 B 在转到 A ,对于 A 来说统计和监控没问题对 B 来说过强没问题。同时 B 拿走折腾对于手机电脑也是无感的,有时候也有可能折腾好了 op 又想动主路由了想换成防火墙或者别的什么系统 于是 B 也拨号同时做个监控 A 链路是否正常,正常就走 A 不正常就直接从 B 出去。这样无论要动哪一个路由器都是无感的对于手机电脑来说。这就完全避免了自己的设备出现单点故障,光猫故障那就是找运营商了。如果是两条宽带那也是可以的一条路由拨号一条光猫拨号 两条都接在 A 做负载分担 op 路由器 B 接一条光猫拨号的。效果也是一样的。保证折腾网络不影响屋里使用的人同时本人不在家不管是哪个路由器坏或者有问题也不影响屋里人。
    WOSHILIDAYE
        110
    WOSHILIDAYE  
       2023-07-01 00:45:27 +08:00
    @sun82kg #56 请问有详细的小白教程吗?看了文章没看懂,现在我的情况我 redMiAX6000+A6S*2+J1900+电信千兆
    bao3
        111
    bao3  
       2023-07-01 01:24:48 +08:00
    除非你是高手,否则旁路由你千万别用。问题有一堆,你又不懂如何排查。
    qwvy2g
        112
    qwvy2g  
       2023-07-01 02:30:23 +08:00 via Android
    有没有透明模式的旁路由?似乎有人叫透明网桥,不需要修改 DHCP 获得内网网关地址。试了几个常见 openwrt 常见几种软件似乎只有 openclash 能实现流经网桥流量自动走代理。但是众所周知 openclash 两种模式都有各种问题。
    neroxps
        113
    neroxps  
       2023-07-01 11:11:09 +08:00
    >>加速的 IP 地址不一定是被墙的,被墙的 IP 地址流量也不一定是 TCP/UDP 的,太局限了。

    @oovveeaarr #101 这个涉及到成本问题,你如何确定 IP 被墙?如何确定直连或者代理能获得更好的体验?这些都需要成本。所以一贯做法,直接订阅大家维护的域名规则库,匹配到规则库则直接跑出去代理服务器,例如 github 某些地区,的确能获得很好的链接体验,但偶尔有一天墙调整了,可能会偶尔抖动,也可能以后都无法连接。这时候需要调整它们就增加维护成本,还不如直接订阅大家维护的规则库,即使你这边能直连,但是代理也不会有太高的成本。以上是我个人的看法。GFW 不可控,我只能控制自己的梯子。
    neroxps
        114
    neroxps  
       2023-07-01 11:14:06 +08:00
    @oovveeaarr #101 而关于非 TCP 、UDP 流量代理问题,这个就看需求了,大多人需求只是这两个协议。如果你有这种需求,那可以采用基于 L3 的代理。甚至 L2 的也行。
    所以一切得看需求。
    fengyaochen
        115
    fengyaochen  
       2023-07-02 07:24:36 +08:00
    @thereone 主路由就会发生 1 个 ip 对应的 mac 地址在不停地发生变化 以前爱快做主路由就是这样的,现在已经没这问题了
    fengyaochen
        116
    fengyaochen  
       2023-07-02 07:31:02 +08:00
    @Jirajine 我直接在 ESXI 里拆分成主路由 旁路由 DNS 服务器,主路由只负责拨号+端口转发+流控+DHCP ,旁路由只负责科学上网国内外 IP 分流,Centos 搭建一个 MOSDNS 专门做 DNS 分流,主路由用 iuai ,DHCP 指定我自己所有设备走旁路由+MOSDNS ,家人所有设备不走旁路由+运营商 DNS
    fengyaochen
        117
    fengyaochen  
       2023-07-02 07:38:12 +08:00
    @Jirajine IPV6 国外直接 drop 掉 AAAA 地址,国内随便玩,这样就不会泄露了,没有 AAAA 地址就没法直连了
    fengyaochen
        118
    fengyaochen  
       2023-07-02 07:42:02 +08:00
    @bobryjosin 爱快+openwrt 能不能做 vrrp 啊
    ambition117
        119
    ambition117  
       2023-07-02 08:57:42 +08:00
    @neroxps 我觉得不完美,维护域名根本不靠谱,覆盖不全的,而且 fakeip 难免有问题

    在主路由上将非中国大陆 ip 流量全部导给 clash ,dns 用 chinadns 那种方案,这个维护量最小

    而且还有很多好处:
    dns 放在主路由下面,这样查国内 dns 服务器就走国内,查国外 dns 就走 clash ,cdn 最友好。

    用 mosdns 模拟 chinadns 方案,还能写规则让特定域名去查 clash dns 获得 fake-ip ,从而可以关照 openai 这种需要特殊处理的域名。
    ambition117
        120
    ambition117  
       2023-07-02 09:01:02 +08:00
    @neroxps 我觉得不完美,维护域名根本不靠谱,覆盖不全的,而且 fakeip 难免有问题

    在主路由上将非中国大陆 ip 流量全部导给 clash ,dns 用 chinadns 那种方案,这个维护量最小

    而且还有很多好处:
    clash 上不用搞很多基于域名的规则,大部分流量进来就走 ip 匹配规则

    dns 放在主路由下面,这样查国内 dns 服务器就走国内,查国外 dns 就走 clash ,cdn 最友好。

    用 mosdns 模拟 chinadns 方案,还能写规则让特定域名去查 clash dns 获得 fake-ip ,从而走 clash 域名匹配的规则,可以关照 openai 这种需要特殊处理的域名(比如新加坡 vps 之类的)。
    bobryjosin
        121
    bobryjosin  
       2023-07-02 12:11:00 +08:00 via Android
    @fengyaochen 爱快不行
    limon
        122
    limon  
       2023-07-02 13:08:19 +08:00
    @neroxps 谢谢,试了下这个方法挺不错的,clash + mosdns ,电信路由上加条静态路由,需要翻墙的设备设下 dns 就行,国内流量也不用再经过我那颗孱弱的 j1800 了 🤣
    redial39
        123
    redial39  
       2023-07-02 19:47:42 +08:00
    我用的就是 @neroxps 的方案,只不过我是用 coredns+chinadns 项目判断了国内域名,其余分流进 clash,就像#113 说的,这是个成本问题,对我来说最适合的是国内白名单方案,因为正常需要访问的国内网站就这么多,掰着指头数得过来,其余时间常驻 google,而且我观察了 clash 和 dns 的数据监控,基本都是预期内的分流行为,增加了自己的白名单以后几乎命中 99%,个人用户实在不用追求完美,如果真想.我也可以在 ros 里再加一道非国内 ip 段的判断打标走策略路由,但评估下来,没必要了
    neroxps
        124
    neroxps  
       2023-07-02 23:15:33 +08:00
    @ambition117 #119 你说的是正确的,非大陆 IP 全部导到 clash 。只是大部分人域名已经足够,我用的是这套规则,已经足够了 https://github.com/blackmatrix7/ios_rule_script/tree/master/rule/Clash ,其余自定义域名我自己维护了一份规则,修改后实时更新到 coredns 上,coredns 会定期更新规则,过程是自动订阅的,不需要人维护。并非所有人的硬路由都能添加大陆 IP 全表到路由表里。另这个路由表其实还是需要维护的。

    只是你说的这种方案需要获得真实 IP ,这样 fake-ip 优势就没有了。

    mosdns 的 chinadns 的方案我没有了解过,但听你这样说,我感觉和 DNS 分流没什么区别?
    ambition117
        125
    ambition117  
       2023-07-02 23:53:24 +08:00
    @neroxps 就是同时查两个 dns 服务器,国内运营商跟国外的,国内运营商 dns 返回国内 ip 就采用国内运营商的结果,否则就采信国外 dns 服务器。因为 mosdns 放在主路由下面,主路由已根据 ip 分流,所以国内运营商跟国外的 dns 服务器那里都能获得 cdn 友好的结果。dns 解决后,其他流量根据主路由上的 ip 分流已经能覆盖绝大多数情况。

    然后这个方案依然可以获得 fake-ip 的优势。也就是主路由那边配置把 fake-IP 段给 clash ,同时 mosdns 跟 clash 那里都配置域名规则,mosdnz 的域名规则是命中域名规则的查 clash 的 dns 服务器端口,clash 域名规则就是 clash 的分流规则,这样就获得了根据域名分流的能力,同时将 fake-ip 潜在的兼容性问题的影响范围控制在最小。这样一个坏处是两边都要配置域名规则,不过好在 mosdnz 的域名规则语法跟 clash 差不多,像 openai 这种不能用香港服务器的也比较少。

    主路由也跑在软路由上也可以。不过我是用 mikrotik RB5009UG ,最近想试试能不能从 iptables 换成用 ospf 分流...
    neroxps
        126
    neroxps  
       2023-07-03 11:44:54 +08:00
    @ambition117 #125 大概理解了,国外的 CDN 友好其实不需要关心,因为代理服务器那边还是会重新查一次 DNS ,根本不会走你当前 DNS 获得的 IP 。

    特别是 clash 那种多规则多服务器,你 DNS 从哪里查?例如有 美国,香港 两个服务器,你上游 DNS 是 1.1.1.1 ,你从香港查,返回的肯定是香港友好的 CDN IP ,但这个域名其实规则是走到美国节点,所以只要确认这个流量是被代理,那么就返回 fakeip 这样就好了。

    fakeip 缺点主要是例如你想排查国外的域名或者被代理的域名链接的时候会比较麻烦。这个 ros dns static 里配个 FWD 即可,例如馒头的域名我直接在 ros 上配置 FWD ,这样不管我的 coredns 的规则里有没有馒头的域名,我馒头的域名都是会向运营商的 DNS 查询。

    国外未墙的 IP ,也不会放到 dns 规则里,不在规则里的自然就是从本地运营商 DNS 查询(例如梯子服务器的 dns )这样其实是一样的。只需要维护一套规则即可。

    其实你方案和我的差不多,大家都是用 dns 服务器根据规则向两个上游服务器查询 DNS ,最终确认该流量是否被代理。
    redial39
        127
    redial39  
       2023-07-03 16:43:41 +08:00
    @neroxps 国外未墙 ip 由国内解析以后,因为返回真实 ip,走的 isp 出口,会变慢,个人建议非国内的全部爬梯,前提是流量够 = =
    kanepan19
        128
    kanepan19  
       2023-07-03 18:57:34 +08:00
    主路由 + n1 盒子 , 基本算稳定

    不过有出现 N1 盒子有时候, 因为用的 v2ray 的服务器挂了而死机过。
    neroxps
        129
    neroxps  
       2023-07-03 23:38:21 +08:00
    @redial39 #127 变慢并非不能访问,例如馒头等一众 PT 站的 IP 地址,收集和维护他们,还有 BT 的连接,这些 IP 需要处理呢,虽然可以在路由根据源 IP 地址或者端口协议来做策略,但我个人觉得对于未墙 IP 走 ISP 出口变慢这点成本并未大于我要维护局域网内 BT 机器源 IP 协议等防火墙规则(忘记配置导致流量跑到梯子那边)。
    目前基于上面所说的域名规则,基本涵盖了我所使用的墙外服务。

    这是每个人需求不同,所以相对应的维护成本也不同,有的人喜欢 ROS tun 到 vps 收 BGP 路由,国内外分流,直接三层下分流,最准,也零维护。只是相对我而言,我目前方案已经满足需求,我就不再花成本去折腾了。
    ambition117
        130
    ambition117  
       2023-07-04 00:38:11 +08:00 via iPhone
    @neroxps clash tun 模式不会在代理服务器重新解析 dns 的,除非你走 clash dns 服务器端口,这样 clash 才会帮你解析。

    tun 模式下再自行做 dns 解析,clash 是不能把连接跟域名对应起来的,只能走 ip 规则,而这正是我想要的,绝大部分情况下 chinadns 方案就足够了,不需要域名规则,就是简单的国内直连,国外走代理。而且 real ip 比 fake ip 兼容性好很多。

    然后我这个方案 mosdnz 里设置走 fake ip 的域名的解析就交给 clash 经过规则对应代理服务器查了。我觉得没有你说的问题。
    oovveeaarr
        131
    oovveeaarr  
       2023-07-04 03:44:27 +08:00
    @neroxps 所以你自己也意识到了局限性,这不就证明了破坏网络完整性的 fake ip 的 dirty 之处。
    因此得出如果是仅作为代理使用,是勉强够用的这个结论。

    但是如果落到实际上的话,不谈其他场景,单是“网络代理”这个用途,fakeip 都只能说是下下策,说不上优雅,更和“最佳实践”没有太大的关系。

    其实随便想一下都有无法覆盖的场景,fakeip 强制依赖于 dns 劫持,对于非 dns 场景更是完全不可用。
    如果是恰好碰到了“安全 dns”场景,也是非常无解的;除此之外,也实现不了之前提到的稍微常用的一些策略路由了。

    所以这个方案增加了太多没有太多意义的复杂性,我之前有提到其他设计方法你可以重新去看一下,和你说的并不冲突。
    oovveeaarr
        132
    oovveeaarr  
       2023-07-04 03:59:49 +08:00
    @oovveeaarr 顺便再说一下你误解的“成本问题”。我们在这里讨论的其实和你说的“成本问题”,没有关系。
    主要说明的问题是,fakeip 托管了全局流量,并声称(也不得不)能够接受了其并不兼容的问题,这是 fakeip 非常严重的一个问题,也是最 dirty 的地方。
    neroxps
        133
    neroxps  
       2023-07-04 09:30:42 +08:00
    @ambition117 #130 @oovveeaarr #131 其实我不用 real ip 主要麻烦是在主路由需要设置国内路由全表,我目前的情况无法能百分百确定路由表准确性(我没 BGP 收表,我也没 vps ,梯子是买的,这也是大部分人的场景。)另是我主路由是 MikroTik RB750Gr3 那么大的路由表对它而言也是一种负担。
    论拓扑兼容性,fake-ip 不挑主路由,即使你使用电信光猫来作为路由依然可以达到使用的目的。对于大部分普通人,爬墙流量占比是网络总流量的 10%以下,fake-ip 我觉得是比较适合大多数人。
    如果是重度使用爬墙服务,那么就需要对设备或者拓扑进行适配了。简而言之一切按照需求来。

    我的需求:
    满足拓扑兼容性(主路由是否什么设备都可以?)
    维护便利性(需要维护多少个模块?排查问题是否方便,例如能否手机打开一个 web 页面就能维护而不需要敲终端命令)
    网络性能(主路由内存弱鸡的情况下依然能适配,且不影响国内流量转发)

    fake-ip 我觉得是比较适合我。

    至于缺点:
    假地址导致某些程序内置 DNS 挟持校验无法联网(目前我家里的应用不受影响,我也不看奈飞,更多的还是挂 PT 自动下载本地观看)
    破坏网络完整性?(对我而言,匹配了 dns 规则的地址我根本不关心它完不完整,他流量能去到梯子那头就足够了,我又不是天天在家里监控这个网监控那个网····)

    处于以上考虑,所以我没部署基于 Real ip 的硬+软路由方案。
    ambition117
        134
    ambition117  
       2023-07-04 22:34:40 +08:00
    @neroxps 如果你要主路由什么设备都可以的话,可以先所有流量过软路由,然后软路由上面 iptables 设置大陆 ip 直接 forward 到主路由上,不进 clash 。然后剩下就都一样...

    大陆 ip 列表 github 上到处都是吧,比如看看 openclash 这种用的什么借用下就是了

    而且我这套方案理论上兼容性很好,比如还能保证访问一个网站源 ip 一致等。而事实上,确实已经 3 年没调整过设备以及软件了,期间变更就是 chinadns+smartdns 换成了 mosdns..
    mithrilyue
        135
    mithrilyue  
       2023-07-05 15:49:36 +08:00
    实践下来最好的体验还是二级路由。
    一层硬路由,负责拨号等,也有自己的 DHCP,DNS ,
    出国单独做 vm,放一层下
    opnsense 做二级路由,设置多网关,出国那路炸了直接自动切本地那一路, 做 DNS ,策略路由等等等都在二级上做,还可以很方便的配置管理多网段,流量镜像,审计等等。

    虽然多了一级路由那层多了一个故障点,但是一级是个拨号的硬路由, 你的 all in one boom 了理论上可以简单切换保证基本上网。(只要静态地址是 DHCP 下发而不是写在设备里面,动态的无所谓)

    性能够的话本地多一跳多点延迟基本无感?

    稳定性 allinone 只看 host ,二级路由之类的都可以 VRRP 做热备虚拟机,或者快照。
    当然,实践证明还是会由意外的,比如 pve dist upgrade, 网卡名字变了导致 boom 之类的。
    makedir002
        136
    makedir002  
       2023-07-14 14:42:10 +08:00
    冷知识,op 比硬路由系统稳定性更高
    shinelogo
        137
    shinelogo  
       2023-09-02 17:50:57 +08:00
    @sun82kg 能提供 ARMV6 版本吗?我的是硬路由
    hussion
        138
    hussion  
       2023-09-11 14:22:27 +08:00
    @neroxps
    请问一下,您说 tplink 家用路由器,他也能完美的完成这个需求;对于这种非智能路由器,没有 ssh ,如何添加静态路由规则呢?我的路由器是 Linksys 的 mx4200 ,没有开放 ssh ,一直比较困扰这个问题,求解答
    neroxps
        139
    neroxps  
       2023-09-11 19:18:28 +08:00 via iPhone
    @hussion 一个路由,最基础的功能就是能添加静态路由吧。
    leonme
        140
    leonme  
       295 天前
    @ufok #78 换 ros 吧,ros 一般运行几年都不用关机
    nkcfc
        141
    nkcfc  
       295 天前
    @Jirajine 能否分享下如何 openwrt 下透明网桥加 open clash 呢,要能处理 v6 的,看了网上的教程对 v6 无效。
    ruidi
        142
    ruidi  
       150 天前
    @sun82kg 大佬,可否抽空出个教程? docker 上的介绍作为小白看不太懂全网,可以有偿。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3126 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:03 · PVG 22:03 · LAX 06:03 · JFK 09:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.