让天大校园网变成真正的校园网——PPPOE连接后原先DHCP的IP不可用的解决方案
Posted 王冰冰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让天大校园网变成真正的校园网——PPPOE连接后原先DHCP的IP不可用的解决方案相关的知识,希望对你有一定的参考价值。
首先说明我的场景:
一台电脑安装windows,一台安装linux。两台电脑都连接校园网,并且插网线,拨号。这样获取了两个IP:一个是校园网DHCP的IP,一个是PPPOE的IP。
另外,windows电脑还有一个wifi网卡,也可以获得一个IP。
这几个IP的前缀分别是:有线网DHCP:172.24.*.*
,PPPOE宽带拨号:172.26.*.*
,wifi:172.23.*.*
连接PPPOE后会把默认路由设置为指向PPPOE接口,导致DHCP得到的IP几乎处于废止状态,发出去连接不使用它,给它发的传入连接也会被丢弃。
这两个网络接口分别是:eno1和ppp(ifconfig可以看到)
以下的所有前提是:假定校园网的路由器本身是正确的,有线、宽带、无线都可以正确被路由,本身没有做任何网络切割。
为了解决这些问题
总共分为这么几种情况:
- 让linux的dhcp的ip可以被连接
https://support.huaweicloud.com/trouble-ecs/ecs_trouble_0307.html
sudo vim /etc/iproute2/rt_tables
添加:32000 djc
sudo ip route add default via 172.24.64.1 dev eno1 table djc
sudo ip rule add from 172.24.67.11 lookup djc prio 32000
# sudo ip rule add from $(ip -j -4 addr show eno1 | jq -r \'.[0].addr_info[0].local\') lookup djc prio 32000
简洁版:
sudo ip route add default via 172.24.64.1 dev eno1 table djc
sudo ip rule add from $(ip -j -4 addr show eno1 | jq -r \'.[0].addr_info[0].local\') lookup djc prio 32000
让来自不同的网卡的数据包查阅不同的路由表,这样,就不会出现收到来自非默认接口(PPP)的数据包,但是从默认接口(eno1)发出去响应包,导致对方无法接收的情况。
此时,在windows发起ssh连接,连接linux,使用的是windows的PPPOE接口。同时linux ping不通windows的有线网IP和无线网IP,只能ping宽带IP。
原因就是:发出去的ping数据包到达windows网卡后,会从windows的宽带网卡发出响应包!这不正确!会被丢弃。应该是哪个网卡收到就从哪个网卡发送响应包!这个问题在linux下面可以让每个网卡使用自己的路由表来解决,但是windows没有这个功能!
所以只能取舍一下,使用一个略微阴间的解决方案:windows上设置路由,让去往linux主机的数据包走DHCP网卡,而不是PPPOE!这样windows连接linux主机也会走有线网卡而不是默认的PPPOE。
2. 使用dhcp的ip发起传出连接
但是,windows的路由设置没有不同网卡使用不同的路由表的功能,这样就会出现:外部发送到非默认网卡的数据包,从默认网卡发送了响应。一个尴尬的解决办法是,添加一条路由,让目的地是外部的ip路由到DHCP。
代码:
route add 172.24.0.0 mask 255.255.0.0 172.24.8.1 if 16
route add 172.26.0.0 mask 255.255.0.0 172.24.8.1 if 16
这样,让去往172.24.0.0/16和172.26.0.0/16的数据包网关是172.24.8.1,接口是有线网卡。这样linux的两块网卡就可以互相ping通windows的两块网卡了。
这里有点不理解的问题:linux的默认路由是走PPPOE(172.26.x.x),从这里访问windows的有线网卡和PPPOE接口,响应数据包都会通过172.24.x.x发送出去。linux访问windows的pppoe,数据包来自接口pppoe,但是响应包从有线网卡接口发送出去,仍然能正常工作。感觉是把两个接口当成了一个接口在用?或者说windows的rp_filter机制是,PPPOE的响应数据包走物理网卡不会被丢弃,物理网卡的响应数据包走PPPOE会被丢弃。都是猜测。
如果需要让linux ping windows的wifi网卡,按理说那么就要相对应的更改上述路由的网关为wifi的网关。
如果想让来自别人wifi的可以ping通有线网卡,则需要添加一条:
route add 172.23.0.0 mask 255.255.0.0 172.24.8.1 if 16
以上是关于让天大校园网变成真正的校园网——PPPOE连接后原先DHCP的IP不可用的解决方案的主要内容,如果未能解决你的问题,请参考以下文章
企业网/校园网 网关设备通过PPPoE接入向ISP请求前缀委托,让内网三层交换多Vlan获取ipv6地址