2023年11月27日发(作者:)

当虚拟⽹卡配置成⾃动获取ip的时候

当虚拟⽹卡配置成主动获得ip的时⾠,windowsDHCP client办事将做为DHCP客户端为假造⽹卡获得ip地址,然后设

ip天址,DHCP和谈的discover/offer/request/ack皆没有标题,⼤家可以在如何看电脑配置了解,统统⼀般,discover将获得

tap-win32驱动内部DHCP服务器的呼应,收收offer但是待到租约时候的⼀半或因为某种缘由(好⽐脚动绝约,⼤概戚眠/

叫醒)需求续约的时刻,某些以0.0为⽬标ip地址的对DHCP办事器的拜候将会返回⽑病,经测试,那⾥的"某些"在分歧的

windows版本上是纷歧样的(在我的开辟机上,172.16.0.0/172.161.0.0/17.110.0.0…不成⽤,⽽172.17.0.0/17.16.0.0是可⽤

的,在家⾥的呆板上测试成果⼜纷歧样),如斯⼀去windowsDHCP client服务将初末没法联络到当初租给它ip地址的地

址以0.0末端的服务器,那末当租约⼯夫过了x(按照DHCP实现战现场设置装备摆设肯定)时,windowsDHCP client效劳

将主动丧失虚拟⽹卡的ipip地址,然后从头倡议discover的进程,⽽tap-win32的驱动只给3DHCP request包中client地址

OpenVPN配置的地址没有相称的机遇,也就是道discover的次数是遭到限定的,次数到期以后,凭据tap-win32的真现逻

辑,实拟⽹卡将再也没法从DHCP服务器0.0获得ip地点了,同时在windows体系⽇记中报犯错误,此时只能重启OpenVPN

户端了

2.2.故障现象⼆

2.2.1.⽑病重现

正在内⽹某些机械毗连有标题问题,别的机械就没有问题,好⽐经由过程⽆线毗邻便出有标题问题。

2.2.2.妨碍剖析

1.发现ping⽋亨OpenVPN服务器的虚拟⽹卡ip起⾸查看其物理⽹卡可否ping 通,发现此时192.168.81.28都⽋亨了,断开

OpenVPN客户端就能够ping通;

2.查看OpenVPN服务器的⽇志和OpenVPN客户端⽇志,发现服务器还在不竭发送OpenVPN-PING给客户端,期待跨越

keepalive设置的时间,便发送⼀个客户端重启旌旗灯号,因⽽客户端从新毗邻;

3.启动OpenVPN客户端后通过route print查看客户端地点机器的路由表,发明有两条内⽹192.168.1.0/24⽹段的路由,⼀

条是以物理⽹卡为出⼝,另外⼀条以虚拟⽹卡为出⼼,⽽要念接见81.28则必需通过1.254,会见1.254必需以物理⽹卡为出

⼝;

4.查看OpenVPN服务器的配置,发现其将40⽹段的路由给推送了下来,因⽽192.168.1.0/24⽹段的OpenVPN客户端在毗

连上OpenVPN服务器以后就⽆法和192.168.1.0/24⽹段之外的主机通信了。

2.2.3.阐发总结

1.之以是这个题⽬很隐藏,缘故原由有两⾯,第⼀,⼤家可以在怎么看电脑配置了解,OpenVPN服务器和OpenVPN客户

端通信运⽤UDP和谈,UDP不必要确认,果此从81.28发来的OpenVPN服务器的数据包都能被40⽹段的OpenVPN客户端领

受,⽽反过来就不可了。假设利⽤tcp协议的话,则很快就会断开;第两,在测试的时分,⼤家可以在如何看电脑配置了解,

只是将客户端挂在那边,没有任何数据在上⾥传输,如果传输数据,则顿时就会发现数据传不外往;

N服务器推送下来的路由必然不克不及和OpenVPN客户端地点主机的路由相冲突,因此务必在阐明⽇记时寄望

以下的正告信息:

WARNING: potential route subnet conflict between local LAN [192.168.1.0/255.255.255.0] and remote VPN

[192.168.1.0/255.255.255.0]

3.题⽬解决

3.1.路由题⽬标办理

必然确保没有路由表项抵触,⼤家可以在怎么看电脑配置了解,除经由过程路由表以外,借要查看路由缓存,⼤家可以在

电脑配置怎么看了解,Linux上的路由缓存能够经过route C检察,windows已知。

N的配置参数

OpenVPN中针对windows客户端有⼀个参数:ip-win32。⼀向以来这个参数都被疏忽了,现实上就是因为这个参数被疏

忽引发了花了好久才解决的题⽬。我们普通其实不配置这个参数,是以OpenVPN将利⽤adaptive⾃顺应形式,起⾸将采取

dynamic停⽌测验考试,⼤家可以在怎么看⾃⼰电脑配置了解,⽽adaptive模式中的dynamic不克不及跟任何参数,⽽实践上

dynamic模式有两个参数可以设置:

dynamic [offset] [lease-time]

此中第⼆个参数lease-time就是租约时间,默许是⼀年,第⼀个参数offset影响了DHCP服务器的ip地址,在OpenVPN

server模式下,假设地址池是x.y.0.0/16,那么客户端DHCP服务器的ip为:

ip=(x.y.0.0&&offset==0)||(&&offset>0)|| (x.y.255.255+offset&&offset<0)

c体例处理

可睹假设offset与默许值0,那么客户端的DHCP服务器的ip地址将是⼀个收集地址,OpenVPN其实不假定windows是不

⾏会见收集地址,同时也不假定winsock的任何*SP过滤⾏动,是以将0.0地址作为DHCP服务器地址对OpenVPN来说是合理

的,可是在windows机器上能够就会呈现上述希罕的问题。

假如offset不为0,还要属意⼀种情形,那就是不能将DHCP服务器的ip地址和分派给OpenVPN客户端虚拟⽹卡的ip地址

反复,⽐如offset2,第⼀个衔接的客户端将得到x.y.0.2这个地址,⽽DHCP服务器也将得到这个地址,这在初始化⽹卡ip

址的时⾠就会泛起冲突,因此要留神这⼀点。倡议offset使⽤-1,⼤家可以在查看电脑配置命令了解,如许DHCP服务器ip地址

将会是x.y.255.254,正常环境下很易使⽤到这个ip,除⾮特意分派。

3.4.dynamic体式格局解决

使⽤netsh或者ipapi或者manual体式格局配置ip地址。netshipapi的圆式和DHCP client服务⼤概会辩论,⽐⽅虚拟⽹卡

的状况会不断在"正在获取ip地址"但是现实上ip地址已得到并设置上了,由于和windowsDHCP client服务相⼲,今朝并没有

对这类形态举⾏测试。netsh/ipapiDHCP的希罕征象和windows的版本也有⼲系。最清洁的体例就是manual⽅法设置ip

址。然⽽这需要⽤户按照OpenVPN客户端的输出疑息⼿⼯配置ip地址,因此并不保举使⽤。

3.5.修正tap-win32驱动⽅式解决

点窜ProcessDHCP函数逻辑并将DHCP的限造次数增添到⼀个很年夜的值: