sing-box旁路由配置

·
Table of Contents

旁路由

# 开启流量转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/90-override.conf

# 流量转发设备建议设置 default_qdisc 为 fq_codel,详细信息可以阅读:https://www.starduster.me/2020/03/02/linux-network-tuning-kernel-parameter/#netcoredefault_qdisc
echo "net.core.default_qdisc = fq_codel" >> /etc/sysctl.d/90-override.conf

# 用于控制反向路径过滤(Reverse Path Filtering)的一个内核参数,它决定了系统如何处理进入的数据包的源地址校验。
# 如果命令 sysctl -a | grep '\.rp_filter' 输出中你的网卡对应的值是 2 ,则需要重新覆盖设置为 0。
# 0:表示不开启源地址校验。系统不会检查进入的数据包的源地址,即使数据包的源地址不可达,也不会被系统丢弃。
# 1:表示开启严格的反向路径校验。系统会检查每个进入的数据包,确保其反向路径是最佳路径。如果不是,数据包将被丢弃。
# 2:表示开启松散的反向路径校验。系统会检查进入的数据包的源地址是否可达,即反向路径是否能通(通过任意网络接口)。如果反向路径不通,数据包将被丢弃。
echo "net.ipv4.conf.default.rp_filter = 0" >> /etc/sysctl.d/90-override.conf
echo "net.ipv4.conf.*.rp_filter = 0" >> /etc/sysctl.d/90-override.conf

# 使设置生效
sysctl --system
sysctl -p

sysctl -w net.ipv4.ip_forward=1
# iptables -t nat -A POSTROUTING -o <external_interface> -j MASQUERADE

SNAT

  • MASQUERADE 是 SNAT 的一个特例,主要区别在于目标源IP地址的获取方式。
  • SNAT 需要明确指定一个固定的IP地址或地址范围,而 MASQUERADE 则会自动从网卡上获取当前的IP地址。
  • 因此,MASQUERADE 特别适用于IP地址是动态分配(如PPPoE拨号或DHCP)的场景,因为它不需要每次IP地址变化后都手动修改规则。
  • MASQUERADE 的效率稍低于 SNAT,因为它每次都需要查找可用的IP地址,而 SNAT 使用的IP地址是预先配置好的。
  • 但在大多数情况下,这种性能差异非常微小,不会造成明显影响。

主机配置

# lookup 是 table 的同义关键字(alias),源自早期 iproute2 的设计兼容性
# lookup 是历史遗留别名,虽可用,但新脚本建议统一用 table 避免歧义

# 使用main进行路由,且非main中默认路由的流量, 即直连网段的主机
sudo ip rule add priority 5000 from all table main suppress_prefixlength 0  
# main路由表未匹配的流量(main中原来需要走默认路由的流量), 即非直连网段的主机
sudo ip rule add priority 5001 from all table 5001
# 配置所有非直连网段的默认路由
sudo ip route add default via 192.168.66.1 dev enp3s0 proto static table 5001