Linux连接PPPoE后不能像Windows那样保留原有物理网卡IP地址所采取的措施

1、开门见山,说明现象

(1)已知网络环境内有一台Linux系统的PC和一台Windows系统的PC,在连接PPPoE之前,相关物理网卡IP地址如下:
在这里插入图片描述
在这里插入图片描述
(2)如果此时现网环境内已经搭建好了一台PPPoE服务器,Linux和Windows分别连接PPPoE后,可以看到下图所示的情况:
在这里插入图片描述

在这里插入图片描述
(3)可见,Linux系统和Windows系统分别连接到PPPoE后,Linux没有保留原本物理网卡的地址,而Windows保留了。需要注意的是,成功连接PPPoE后不保留IP地址的情况,存在于所有以NetworkManager服务为基础的Linux发行版上,并不是特定某几种Linux发行版所独有的现象。

2、Linux连接PPPoE后不保留物理网卡所带来的局限性影响

在这里插入图片描述
如上图所示,Linux和Windows系统分别接入PPPoE后,Linux会因为原有物理网卡的IP地址被清空而无法和原有同网段的LAN(局域网)进行网络通信,而Windows因为原本物理网卡的IP地址被保留,因此仍旧可以和原本同网段的LAN的保持正常的网络通信,而如果原有的LAN存在跨网段,因连接PPPoE后默认路由被改变,因此需要在PC中手工添加路由才可以进行通信。

3、如何保留该IP地址,以保持和原有局域网通信

经过测试,通过Linux的NetworkManager服务中的nmcli或nmtui,是无法保留原有IP地址的,从命令行上看,原有物理网卡和PPP虚拟网卡,只能同时保持一张网卡为带*号的活跃状态,如下图所示:
在这里插入图片描述
在这里插入图片描述
虽然该服务无法永久保留物理网卡的IP地址,然而我们仍旧可以通过“ifconfig <物理网卡名称> <IP地址>”的方式将原有IP地址重新配置上以达到保留的效果,以原有IP地址为192.168.100.70为例,如下图所示:
在这里插入图片描述
最终的效果如下:
在这里插入图片描述
对于熟悉Linux命令行的用户而言,此方法可以解决IP地址不保留的所带来的原有局域网网络通信中断问题。

4、通过Shell脚本改善deepin或UOS上的PPPoE体验

作为Linux发行版之一的deepin和带图形化的UOS等操作系统上,如果在保持PPPoE连接的情况下进行重启操作,重启完成后,系统会自动连接PPPoE,导致原有物理网卡来不及获取IP地址,使得用户不知道应该配置哪个地址到物理网卡上,且每次通过命令行配置IP地址对于用户而言过于繁琐,此时可以考虑通过以下Shell脚本来解决此问题:(对于其他Linux发行版,如Ubuntu、Ukylin等,可依此脚本为模板做实际修改)

#!/bin/bash
username=`cat /etc/passwd | grep 1000:1000 | awk -F: '{print $1}'`
defaultInterfaceName=`route -n | sed -n '3p' | awk '{print $8}'`
defaultInterfaceIPaddr=`ifconfig ${defaultInterfaceName} | grep broadcast | awk '{print $2}'`

#在/etc/udev/rule.d目录下创建规则——82-pppoe-saveIPaddr.rules,以实现PPP虚拟网卡启动时,执行脚本ifconfigIPaddr.sh
function createPPPoEUdevRule(){
	touch /etc/udev/rules.d/82-pppoe-saveIPaddr.rules
	touch /etc/ppp/ifconfigIPaddr.sh
	echo "SUBSYSTEM==\"net\",ACTION==\"add\",KERNEL==\"ppp*\" RUN+=\"/etc/ppp/ifconfigIPaddr.sh\"" > /home/${username}/Desktop/82-pppoe-saveIPaddr.rules
	mv /home/${username}/Desktop/82-pppoe-saveIPaddr.rules /etc/udev/rules.d/
	chmod 644 /etc/udev/rules.d/82-pppoe-saveIPaddr.rules
}

#编写udev规则82-pppoe-saveIPaddr.rules中所需要执行的shell脚本ifconfigIPaddr.sh和存储默认网卡名和IP地址的文本文件defaultRouteInterfaceAndIPaddr.txt
function createIfconfigIPaddr_sh(){
	echo $defaultInterfaceName > /home/${username}/.defaultRouteInterfaceAndIPaddr.txt
	echo $defaultInterfaceIPaddr >> /home/${username}/.defaultRouteInterfaceAndIPaddr.txt
	chown ${username} /home/${username}/.defaultRouteInterfaceAndIPaddr.txt
	chgrp ${username} /home/${username}/.defaultRouteInterfaceAndIPaddr.txt
	cat << EOF > /etc/ppp/ifconfigIPaddr.sh
#!/bin/bash
username=\`cat /etc/passwd | grep 1000:1000 | awk -F: '{print \$1}'\`
ifconfig \`sed -n '1p' /home/\${username}/.defaultRouteInterfaceAndIPaddr.txt\` \`sed -n '2p' /home/\${username}/.defaultRouteInterfaceAndIPaddr.txt\`
EOF
	chmod a+x /etc/ppp/ifconfigIPaddr.sh
}

#针对于Linux在PPPoE连接时,重启系统后默认连接PPPoE时再次丢失物理网卡IP地址的措施
function afterRestartSystem(){
	cat << EOF > /home/${username}/.findIPaddrAndInterfaceName.sh
#!/bin/bash
username=\`cat /etc/passwd | grep 1000:1000 | awk -F: '{print \$1}'\`
defaultInterfaceName=\`route -n | sed -n '3p' | awk '{print \$8}'\`
defaultInterfaceIPaddr=\`ifconfig \${defaultInterfaceName} | grep broadcast | awk '{print \$2}'\`
echo \$defaultInterfaceName > /home/\${username}/.defaultRouteInterfaceAndIPaddr.txt
echo \$defaultInterfaceIPaddr >> /home/\${username}/.defaultRouteInterfaceAndIPaddr.txt
EOF
	chmod a+x /home/${username}/.findIPaddrAndInterfaceName.sh
	echo "nmcli connection down \`nmcli connection show --active | grep pppoe | awk '{print \$(NF-2)}'\`" >> /etc/profile
	echo "sleep 4" >> /etc/profile
	echo "bash ~/.findIPaddrAndInterfaceName.sh" >> /etc/profile
}

#函数调用
createPPPoEUdevRule
createIfconfigIPaddr_sh
afterRestartSystem

【注】此脚本目前可以优化deepin和UOS系统上的PPPoE操作体验,例如,可以实现在连接PPPoE时,系统自动补充原有物理网卡的IP地址到物理网卡上、在deepin/UOS保持PPPoE连接时重启不再自动连接PPPoE。但某些场景仍旧无法应对——如使用过程中IP地址被改变且不重启电脑(如DHCP租期到期概率性造成IP地址被改变的情况)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值