1. 前言

    因为家里的壮天鹅不想跑在 OpenWRT/树莓派 (ArchlinuxARM)上,导致我必须将 rtorrent 和 StrongSwan 都跑在 Gen8 上。因为 ESXi 各种坑的缘故,我又没给 Gen8 开启底层虚拟化,所以此时配置网络栈就比较蛋疼了。

    好在调查了一番之后,找到了 Network namespace 这个方法,它能在不同命名空间下跑完全隔离的 IP栈,这就让事情一下子简单了喵~

  2. 准备工作

  • Linux Server 一台(我这里是Gen8)
  • Kernel > 4.10 (其实版本低一点也没大问题,不过我这里要配置 XFRM 壮天鹅,所以必须高一点
  • iproute2 (新版本 IP 工具包,替换 ifconfig arp netstat route 等命令
  1. 网络规划

因为入户的 电信光猫 绕不开,所以我这里其实饶了些路喵~现在物理链路和IP段落如图所示:

graph TD
  I[Internet/ISP 光猫] -- 192.168.1.a --> R1[OpenWRT Router]
  Switch --> G8[Gen8]
  I -. 192.168.1.b .-> G8
  R1 -. 172.16.x.x .-> P[Phone & Other Device]
  R1 -- 172.16.x.x --> Switch
  Switch --> PC[PC & LAN DEVICE]
  1. 配置 VPN

利用 XFRM 和 ipsec 设备来做路由,比单纯的壮天鹅好配置多了,代价只是延迟稍微增加但是吞吐量没大影响喵~

ip netns add vpn

ip link add ipsec0 type xfrm dev eth0 if_id 495
ip link set ipsec0 netns vpn

ip netns exec vpn bash -c "ip link s-et ipsec0 up"

# 然后在该命名空间内导入各类路由表
ip netns exec vpn bash route.sh
  1. 配置 BT
ip netns add bt # 添加bt的ns

#因为 Wifi 链路不好直接迁移,所以用 macvlan 克隆一个vlan0设备
ip link add link wlp0sxxx name vlan0 type macvlan

ip link set vlan0 netns bt #移动克隆设备去 bt

# Inside bt netns stack. 执行初始化
ip netns exec bt bash -c "ip link set up vlan0; ip addr add 192.168.1.b/24 dev vlan0; ip r a default via 192.168.1.1 dev vlan0"

# 启动 BT 请用这种方式 ~~sudo 套娃~~ :
sudo ip netns exec bt sudo -u rtorrent rtorrent