多线直连服务器
多线直连是指同一运营商的多条宽带(多个光猫)直接连接到同一台服务器的多个网口,服务器通过多网卡实现多线接入和带宽叠加。
拓扑结构
电信 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. 光猫配置
将所有光猫设置为桥接模式:
- 登录光猫管理界面
- 使用超级管理员账号
- 将连接模式改为"桥接"
- 保存并重启光猫
详见:光猫配置指南
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> # WAN33. 配置多 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 ppp24. 配置策略路由
配置策略路由实现多线负载均衡:
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 15. 持久化配置
创建启动脚本:
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.me2. 测试路由
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.53. 测试带宽
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 -p2. 调整 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 -p3. 优化网卡性能
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
常见问题
拨号失败
原因:
- 光猫未设置为桥接模式
- 宽带账号密码错误
- 网卡驱动问题
解决:
- 确认所有光猫已设置为桥接模式
- 检查每条宽带的账号密码
- 更新网卡驱动:
sudo apt install linux-firmware
部分线路无法上网
原因:
- 策略路由配置错误
- PPPoE 接口未启动
- 网线连接问题
解决:
- 检查策略路由:
ip rule show - 检查 PPPoE 状态:
ip addr show | grep ppp - 检查网线连接和指示灯
带宽未叠加
原因:
- 负载均衡未配置
- 单个连接只走一条线路(正常现象)
- 路由权重配置不当
解决:
- 检查负载均衡配置:
ip route show - 使用多个并发连接测试总带宽
- 调整路由权重参数
如何指定某个应用走特定线路?
使用 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 连接无法跨线路(受限于协议)
- 管理和维护相对复杂
- 网卡数量限制了可接入的宽带数量
