Skip to content

多线直连服务器

多线直连是指同一运营商的多条宽带(多个光猫)直接连接到同一台服务器的多个网口,服务器通过多网卡实现多线接入和带宽叠加。

拓扑结构

电信 500M → 光猫 A(桥接) → eth1 ┐
电信 500M → 光猫 B(桥接) → eth2 ├→ 服务器(多网口,多拨号)
电信 500M → 光猫 C(桥接) → eth3 ┘
                          eth0 → 管理网络

适用场景

  • 单台服务器需要同一运营商的多条宽带接入
  • 服务器具备多个网口(3个或以上)
  • 需要多个独立公网 IP(同一运营商)
  • 实现带宽叠加和负载均衡
  • 无需额外购买软路由或交换机
  • 适合电信/联通等支持多拨的运营商

硬件要求

服务器网卡配置

  • 至少 N+1 个网口(N 为宽带数量,1 个用于管理)
  • 推荐使用千兆或万兆网卡
  • 支持多网卡绑定和策略路由

示例配置:

宽带数量网口需求推荐配置
2 条3 网口2 个 WAN + 1 个管理
3 条4 网口3 个 WAN + 1 个管理
4 条5 网口4 个 WAN + 1 个管理

光猫配置

  • 每条宽带需要一个光猫
  • 所有光猫设置为桥接模式
  • 光猫 LAN 口直连服务器网口

配置步骤

1. 光猫配置

将所有光猫设置为桥接模式:

  1. 登录光猫管理界面
  2. 使用超级管理员账号
  3. 将连接模式改为"桥接"
  4. 保存并重启光猫

详见:光猫配置指南

2. 服务器网卡识别

识别服务器上的所有网卡:

bash
# 查看所有网卡
ip link show

# 输出示例:
# 1: lo: <LOOPBACK,UP,LOWER_UP>
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>  # 管理网口
# 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP>  # WAN1
# 4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP>  # WAN2
# 5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP>  # WAN3

3. 配置多 PPPoE 拨号

为每个 WAN 口配置独立的 PPPoE 拨号。

方案 1: 使用 NetworkManager(推荐)

bash
# 安装 NetworkManager
sudo apt install network-manager

# 为 eth1 创建 PPPoE 连接
sudo nmcli connection add type pppoe con-name pppoe-wan1 \
  ifname eth1 username "宽带账号1" password "密码1"

# 为 eth2 创建 PPPoE 连接
sudo nmcli connection add type pppoe con-name pppoe-wan2 \
  ifname eth2 username "宽带账号2" password "密码2"

# 为 eth3 创建 PPPoE 连接
sudo nmcli connection add type pppoe con-name pppoe-wan3 \
  ifname eth3 username "宽带账号3" password "密码3"

# 启动所有连接
sudo nmcli connection up pppoe-wan1
sudo nmcli connection up pppoe-wan2
sudo nmcli connection up pppoe-wan3

方案 2: 手动配置 PPPoE

为每个 WAN 口创建配置文件:

bash
# WAN1 配置
sudo nano /etc/ppp/peers/wan1

配置内容:

plugin rp-pppoe.so
eth1
user "宽带账号1"
password "密码1"
noipdefault
defaultroute
replacedefaultroute
hide-password
noauth
persist
mtu 1492
mru 1492

重复为 wan2, wan3 创建配置文件,修改对应的网卡和账号。

启动拨号:

bash
# 启动所有 PPPoE 连接
sudo pon wan1
sudo pon wan2
sudo pon wan3

# 查看拨号状态
ifconfig ppp0 ppp1 ppp2

4. 配置策略路由

配置策略路由实现多线负载均衡:

bash
# 创建路由表
sudo nano /etc/iproute2/rt_tables

添加路由表:

100 wan1
101 wan2
102 wan3

配置路由规则:

bash
# 获取每个 PPPoE 接口的网关
GW1=$(ip route show dev ppp0 | awk '/default/ {print $3}')
GW2=$(ip route show dev ppp1 | awk '/default/ {print $3}')
GW3=$(ip route show dev ppp2 | awk '/default/ {print $3}')

# 为每个路由表添加默认路由
sudo ip route add default via $GW1 dev ppp0 table wan1
sudo ip route add default via $GW2 dev ppp1 table wan2
sudo ip route add default via $GW3 dev ppp2 table wan3

# 添加策略路由规则
sudo ip rule add from $(ip addr show ppp0 | grep inet | awk '{print $2}') table wan1
sudo ip rule add from $(ip addr show ppp1 | grep inet | awk '{print $2}') table wan2
sudo ip rule add from $(ip addr show ppp2 | grep inet | awk '{print $2}') table wan3

# 配置负载均衡
sudo ip route add default scope global \
  nexthop via $GW1 dev ppp0 weight 1 \
  nexthop via $GW2 dev ppp1 weight 1 \
  nexthop via $GW3 dev ppp2 weight 1

5. 持久化配置

创建启动脚本:

bash
sudo nano /etc/network/if-up.d/multiwan

脚本内容:

bash
#!/bin/bash

# 等待所有 PPPoE 接口启动
sleep 10

# 配置策略路由
GW1=$(ip route show dev ppp0 | awk '/default/ {print $3}')
GW2=$(ip route show dev ppp1 | awk '/default/ {print $3}')
GW3=$(ip route show dev ppp2 | awk '/default/ {print $3}')

ip route add default via $GW1 dev ppp0 table wan1
ip route add default via $GW2 dev ppp1 table wan2
ip route add default via $GW3 dev ppp2 table wan3

ip rule add from $(ip addr show ppp0 | grep inet | awk '{print $2}') table wan1
ip rule add from $(ip addr show ppp1 | grep inet | awk '{print $2}') table wan2
ip rule add from $(ip addr show ppp2 | grep inet | awk '{print $2}') table wan3

ip route add default scope global \
  nexthop via $GW1 dev ppp0 weight 1 \
  nexthop via $GW2 dev ppp1 weight 1 \
  nexthop via $GW3 dev ppp2 weight 1

设置执行权限:

bash
sudo chmod +x /etc/network/if-up.d/multiwan

网络验证

1. 检查拨号状态

bash
# 查看所有 PPPoE 接口
ip addr show | grep ppp

# 查看每个接口的公网 IP
curl --interface ppp0 ifconfig.me
curl --interface ppp1 ifconfig.me
curl --interface ppp2 ifconfig.me

2. 测试路由

bash
# 查看路由表
ip route show

# 查看策略路由规则
ip rule show

# 测试每条线路的连通性
ping -I ppp0 223.5.5.5
ping -I ppp1 223.5.5.5
ping -I ppp2 223.5.5.5

3. 测试带宽

bash
# 测试总带宽
speedtest-cli

# 测试单条线路带宽
speedtest-cli --source ppp0
speedtest-cli --source ppp1
speedtest-cli --source ppp2

性能优化

1. 启用 TCP BBR

bash
echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

2. 调整 TCP 参数

bash
sudo nano /etc/sysctl.conf

添加:

net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1

应用配置:

bash
sudo sysctl -p

3. 优化网卡性能

bash
# 启用网卡多队列
sudo ethtool -L eth1 combined 4
sudo ethtool -L eth2 combined 4
sudo ethtool -L eth3 combined 4

# 调整网卡缓冲区
sudo ethtool -G eth1 rx 4096 tx 4096
sudo ethtool -G eth2 rx 4096 tx 4096
sudo ethtool -G eth3 rx 4096 tx 4096

实际部署案例

案例 1: 电信三线直连服务器

需求:

  • 1 台服务器
  • 电信 3 条 500Mbps 宽带
  • 总带宽 1.5Gbps

拓扑:

电信 500M → 光猫 A → eth1 ┐
电信 500M → 光猫 B → eth2 ├→ 服务器(4 网口)
电信 500M → 光猫 C → eth3 ┘
                    eth0 → 管理网络

设备清单:

  • 服务器: 1 台(8 核/32GB/2TB SSD/4 网口)
  • 光猫: 3 台(运营商提供)
  • 网线: 4 根 Cat6

设备清单:

  • 服务器: 1 台(8 核/32GB/2TB SSD/4 网口)
  • 光猫: 3 台(运营商提供)
  • 网线: 4 根 Cat6

案例 2: 联通四线直连高性能服务器

需求:

  • 1 台高性能服务器
  • 联通 4 条 1Gbps 宽带
  • 总带宽 4Gbps

拓扑:

联通 1G → 光猫 A → eth1 ┐
联通 1G → 光猫 B → eth2 ├→ 服务器(6 网口)
联通 1G → 光猫 C → eth3 ├→ 万兆网卡
联通 1G → 光猫 D → eth4 ┘
                  eth0 → 管理网络
                  eth5 → 备用

设备清单:

  • 服务器: 1 台(16 核/64GB/4TB NVMe/6 网口)
  • 光猫: 4 台(运营商提供)
  • 网线: 5 根 Cat6

常见问题

拨号失败

原因:

  • 光猫未设置为桥接模式
  • 宽带账号密码错误
  • 网卡驱动问题

解决:

  1. 确认所有光猫已设置为桥接模式
  2. 检查每条宽带的账号密码
  3. 更新网卡驱动: sudo apt install linux-firmware

部分线路无法上网

原因:

  • 策略路由配置错误
  • PPPoE 接口未启动
  • 网线连接问题

解决:

  1. 检查策略路由: ip rule show
  2. 检查 PPPoE 状态: ip addr show | grep ppp
  3. 检查网线连接和指示灯

带宽未叠加

原因:

  • 负载均衡未配置
  • 单个连接只走一条线路(正常现象)
  • 路由权重配置不当

解决:

  1. 检查负载均衡配置: ip route show
  2. 使用多个并发连接测试总带宽
  3. 调整路由权重参数

如何指定某个应用走特定线路?

使用 iptables 标记流量:

bash
# 标记特定端口的流量
sudo iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 1
sudo iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 1

# 让标记的流量走指定线路
sudo ip rule add fwmark 1 table wan1

优缺点

优点

  • 无需额外购买软路由或交换机
  • 配置相对简单,成本较低
  • 每条线路独立公网 IP
  • 实现带宽叠加和负载均衡
  • 单条线路故障不影响其他线路

缺点

  • 服务器需要多个网口(硬件要求高)
  • 需要手动配置策略路由(技术门槛)
  • 单个 TCP 连接无法跨线路(受限于协议)
  • 管理和维护相对复杂
  • 网卡数量限制了可接入的宽带数量

下一步

边缘云分发 | 让内容触达更便捷