自从安装ESXi以来,一直有一个问题困扰着我:ESXi无法进行校园网登陆认证。
连接到校园网的设备在分配到IP后,需要在跳转网页中输入学生信息认证后才能正常访问网络。对于命令行界面的系统,学长们通过分析网络流量,已经写出了登陆器脚本,且经过验证能正常工作。然而,该登陆脚本是使用curl发起网络请求的,而ESXi并没有安装curl程序,遂将其改用wget实现。然而测试后发现,ESXi上的wget工具是简化版本的,并不支持发起包含POST数据的复杂请求。经过进一步考察发现,ESXi自带Python且其系统库是完整的,遂改用Python的urllib库中的命令来实现登录。
然而在实际运行时发现,由Python库发起的网络请求被阻塞,在漫长的HTTPS等待超时后返回报错信息,原因不明。这个问题一直导致ESXi无法独立完成网络认证;之前的认证都是通过重启切换到另一个Linux系统(位于启动盘或双系统中)进行认证后(这一步会录入认证的MAC地址)再重启切换回ESXi。然而服务器重启费时费力,这次就想着把这个问题彻底解决。
首先,在经过认证可以正常联网的情况下,使用(简化版的)wget
命令尝试获取百度首页,但是失败,怀疑是HTTPS认证失败的原因;遂改用Python发起请求,强行禁用安全认证后还是陷入HTTPS等待超时。与此同时,还测试了wget
一个HTTP的网址,也有同样的故障。考虑到ping得通对应网站的主机,即ICMP包可以正常收发,考虑是TCP层的故障。
我在另外一台电脑上开启web服务,并监测所有的网络通信,发现ESXi的请求根本没有到达目标电脑,提示ESXi的防火墙可能把这些出站请求拦截了。重新检查ESXi的防火墙配置,发现果然有一条配置443和80端口的名为httpClient的出站规则未启用(为什么服务器系统对出站要求这么严格啊!);在Web Client中启用后,能正确获取百度首页,但是依然无法访问校园网认证;这是因为校园网使用了8443端口进行通讯,这就要求我们增加一条额外的防火墙规则。
我要评论