说明:以下的情况只适用于拨号时vlanid不相同的情况,既每个vlanid对应每一条账号
示例:
#注释
# user password vlanId
97631934481 865278 101
97631934478 100202 102
97631934483 957204 103
准备工作
确保你的系统已安装ppp
和rp-pppoe
包:
sudo apt-get install pppoe ppp
创建VLAN接口
假设你有两个VLAN ID,分别为100和200。我们首先创建VLAN接口eth0.100和eth0.200。
如果你的vlanid相同。但账号不相同。既一个光猫带多条账号。那这种情况网卡的创建方式请看文章最后
sudo ip link add link eth0 name eth0.100 type vlan id 100
sudo ip link add link eth0 name eth0.200 type vlan id 200
# 启用VLAN接口
sudo ip link set up dev eth0.100
sudo ip link set up dev eth0.200
配置文件
首先,在/etc/ppp/peers/
目录中为每个PPPoE连接创建一个配置文件。假设你有两个PPPoE账号,可以创建两个文件:provider1
和provider2
。
/etc/ppp/peers/provider1
plugin rp-pppoe.so
eth0.100 # 使用VLAN接口
user "pppoe账号_1"
noauth
persist
usepeerdns
+ipv6
noipdefault
nodefaultroute # 不设置默认路由
/etc/ppp/peers/provider2
plugin rp-pppoe.so
eth0.100 # 使用VLAN接口
user "pppoe账号_2"
noauth
persist
usepeerdns
+ipv6
noipdefault
nodefaultroute # 不设置默认路由
不设置默认路由是为了不影响管理口的网络连接。如果要设置负载均衡请注释该选项。或者有更好的办法可以在评论区留言。互相学习。
pppoe密码文件
在/etc/ppp/chap-secrets
和 /etc/ppp/pap-secrets
文件中添加你的PPPoE账号和密码。
# Secrets for authentication using CHAP
# client server secret IP addresses
"pppoe账号_1" * "pppoe密码_1"
"pppoe账号_2" * "pppoe密码_2"
也可以将密码直接写进/etc/ppp/peers/provider*的文件里
参考:
nic-enp6s0.104 # 确保这个接口存在
user "pppoe账号"
password "pppoe密码"
启动脚本
以下是一个简化后的脚本,直接使用已存在的VLAN接口进行PPPoE连接
#!/bin/bash
# 定义连接名称数组
CONNECTIONS=("provider1" "provider2")
# 启动每个PPPoE连接
for conn in "${CONNECTIONS[@]}"; do
pppd call $conn nodetach &
done
# 等待所有连接启动
sleep 5 # 等待连接建立
# 检查每个连接是否启动成功
for conn in "${CONNECTIONS[@]}"; do
if ip a | grep -q "ppp"; then
echo "$conn connected successfully!"
else
echo "Failed to connect $conn"
fi
done
#!/bin/bash
# 定义连接名称数组
CONNECTIONS=("provider1" "provider2")
# 启动每个PPPoE连接
for conn in "${CONNECTIONS[@]}"; do
pppd call $conn nodetach &
done
# 等待所有连接启动
sleep 5 # 等待连接建立
# 检查每个连接是否启动成功
for conn in "${CONNECTIONS[@]}"; do
if ip a | grep -q "ppp"; then
echo "$conn connected successfully!"
else
echo "Failed to connect $conn"
fi
done
验证
可以通过ifconfig
或者 ip r
来看是否已经拨号成功且已经获取到 IPV6 的地址
停止拨号
两种方式任选其一都可以。目前尚未考虑平滑停止的问题。
#!/bin/bash
# 定义PPPoE配置文件名称数组
CONFIG_FILES=("provider_1" "provider_2")
# 停止每个PPP连接
for config in "${CONFIG_FILES[@]}"; do
sudo poff $config
done
# 或者通过进程名来停止所有pppd连接
# ps aux | grep 'pppd call' | grep -v grep | awk '{print $2}' | xargs sudo kill
使用kill命令时要小心,确保只杀掉pppd进程,避免误杀其他进程。
提醒事项
- 确保你的VLAN接口已经正确创建和启动。
- 在配置文件中,将eth0.100和eth0.200替换为你的实际VLAN接口名称和ID。
- 确保所有PPPoE连接都支持IPv6。
这个脚本应该能帮助你在Linux系统上更方便地实现支持VLAN ID的PPPoE多拨账号的连接,并且不设置默认路由和开启IPv6支持。如果仍有问题,请检查日志文件(/var/log/messages
或/var/log/ppp.log
),以获取更多调试信息。
当vlanid相同时:
假设你有1个VLAN ID,但是有两条不一样的账号。这时如果你创建子网卡只是名称不一样肯定是会报错的。
但如果我们换一种想法。还是创建一个带vlan的子网卡。这是创建两个名称不一样的虚拟接口,桥接至这个带vlanid的网卡上。既可完美解决这个问题
#创建一个vlanid为101的网卡
ip link add link eth0 name eth0.101 type vlan id 101
#在使用命令创建一个 `macvlan` 接口并将其关联到 `eth.101`
#这样的方式可以创建多个虚拟接口不受限制
ip link add macvlan0 link eth0.101 type macvlan mode bridge
在配置文件中指定虚拟网卡:
/etc/ppp/peers/provider1
noipdefault
noauth
nodefaultroute
+ipv6
name ppp0
unit 0
plugin rp-pppoe.so macvlan0
logfile /var/log/ppp/pppoe-ppp0.log
user 'pppoe账号'
password 'pppoe密码'
然后继续拨号的流程即可