软路由

软路由

软路由是指用运行Linux系统的普通设备当作路由器/网关。

运行软路由Linux系统的设备可以是

  • X86 主机
  • 运行在 X86 设备里的虚拟机。(可以是普通的 VMWare / Hyper-V / VirtualBox 虚拟机,或 PVE 等专门的虚拟化管理平台里创建的虚拟机)
  • ARM 设备(如 N1 盒子)

通常软路由里运行的都是Linux系统。(当然也有奇葩用 Mac OS 的虚拟机跑 surge 当软路由用。),用 Linux 的 IPV4 forward 做路由/转发,用 iptables 的 SNAT / MASQUERADE 做 NAT / 防火墙。而如果要交换机功能一般通过多网口来模拟实现。

目前主流普通家用级别的路由器都内置硬件交换芯片,通常内网互联能够跑满千兆LAN带宽(WAN因为涉及到 NAT,带宽能跑多少取决于不同路由器配置、是否有硬件NAT加速等,但通常跑个几百兆不成问题)。但硬路由最大的问题是CPU弱鸡,并且通常不支持 AES 等加密算法的硬件指令集加速,跑透明代理(shadowsocks, v2ray,或 KoolproxyR 等去广告代理)或(传输加密的)VPN应用或者开启QoS等使用场景性能太差。

X86 软路由

可玩性最丰富。建议直接使用标准 Linux 作为软路由系统,不要去折腾 X86 OpenWrt 什么的,麻烦并且使用上没有任何优势。推荐使用 Alpine Linux 作为软路由系统。

根据网络拓扑结构不同,软路由的几种使用方式:(因为X86设备没有集成交换芯片(X86无法集成交换芯片,路由器是soc直接集成交换芯片,所以交换机上都有个虚拟的 cpu 接口。X86要这样搞除非intel出个专门的芯片),所以网口数一般等于网卡数)

  • 直接代替主路由:需要至少2个物理网口。可能需要配合交换机使用(如果网口数量不足以连接光猫以及局域网内所有有线设备)。能够最大化WAN可用带宽。
  • 单臂路由:只需要1个网口,无需主路由。需要支持vlan的交换机(不支持vlan的普通交换机可能也可以?)。光猫、软路由和局域网有线设备全部接在交换机上。用 vlan 区分 LAN / WAN 流量。配置麻烦。理论上影响WAN最大带宽(延迟也稍微增加)。
  • 旁路由:只需要1个网口。需要配合主路由(硬件路由)。软路由和局域网其他设备接在主路由上。对家庭原有网络拓扑接口改动最小,配置简单。理论上影响WAN最大带宽(延迟也稍微增加)。

请注意“直接代替主路由”和“单臂路由”模式下软路由虽然不需要单独的硬路由,但还是需要配合无线AP。(因为软路由设备很可能没有无线网卡,即使有无线网卡其无线性能通常也远远不足以当作无线路由器使用)

如果软路由系统跑在 X86 虚拟机里,而软路由设备有多个网口并且支持 VT-D,可以将部分网卡直通给软路由的虚拟机系统。但意义通常不大(虚拟机管理器提供的CPU虚拟网卡一般情况下性能足够了)

旁路由模式

这种模式下:

  • 主路由负责PPPoE拨号、DHCP、upnp。
  • 旁路由(X86软路由)负责 VPN / 透明代理、DNS。(让旁路由接管DNS是因为为了达到最佳效果,透明代理需要配合DNS)

主路由的DHCP配置指定下发的网关和DNS服务器为旁路由IP。(或在局域网设备上手工指定网关和DNS为旁路由IP)

旁路由运行 clash 等透明代理。(也可以跑 VPN,但透明代理性能通常远远好于 VPN,而且如果在旁路由上跑VPN必须考虑是否在 POSTROUTING 做 MASQUERADE 等问题)

旁路由对WAN带宽的影响:

(假设硬路由、旁路由和局域网设备均位于相同LAN网段)

局域网设备访问走(路由器透明)代理的网站时:

  • 硬路由:设备 => 硬路由 => 代理服务器 => 目标网站 (反向流量路径相反)
  • 旁路由:设备 => 硬路由 => 旁路由 => 硬路由 => 代理服务器 => 目标网站 (反向流量路径相反)

访问直连的国内网站时:

  • 硬路由:设备 => 硬路由 => 目标网站 (反向流量路径相反)
  • 旁路由:(必须没有对外发流量做 MASQUERADE)
    • 去程:设备 => 硬路由 => 旁路由 => 硬路由 => 目标网站
    • 回程:目标网站 => 硬路由 => 设备

(如果修改设备路由表,可以在使用旁路由同时使设备访问国内IP时去程也直接走硬路由。但需要修改每个设备的路由表,并且需要考虑到与旁路由上的DNS/透明代理配合,收益有限并且配置麻烦,不推荐。)

对于全双工千兆网络环境,考虑千兆宽带(上下行都是千兆)环境下理论上的极限情况,WAN上下行对等且都能跑满千兆,这种情况下旁路由模式下WAN带宽减半,上行+下行加一起总共只能跑 1000Mbp。

如果家庭宽带 <= 500 Mbps或者上下行悬殊(通常情况下),旁路由不会对WAN的带宽造成任何限制或影响(而仅仅稍微增加些延迟)。

软路由 vs 硬路由测试

测速方式使用自己VPS上架设的 iperf3 服务器测试下行带宽:

服务器(iperf3 -s) => 路由器透明代理 => 局域网设备(iperf3 -c server_ip -R)

路由器(硬路由和软路由)上跑的都是 clash。代理服务器是白嫖的 Oracle 韩国虚拟机(下行带宽最大50Mbps)),跑的是 shadowsocks-libev (chacha20-ietf-poly1305)

局域网设备分别将网关设为路由器和软路由以测试:

  • 硬路由 newifi 3 (MT7621AT 2*880MHz, mipsel, 超频到 1000MHz, BogoMIPS 663.55) 跑 openclash,iperf3 跑不到 10Mbps。
  • n3450 (锐角云) Windows 10 系统里运行的 Hyper-V Alpine Linux 虚拟机(分配了1个CPU核心+1GB内存, bogomips 2188.80),跑 clash,iperf3 能够跑满 50Mbps。

Last update: 2020-09-09 05:57:55 UTC