假期结束回到学校,本来计划好了一些要做的事情,可是计划赶不上变化,刚打开电脑就被一个上网问题所困住了。。。
我们学校用的是电信的天翼校园宽带,而且也只有电信这一家,可以说是垄断。。。至于为什么没有其他的ISP,官方说法是我们这边太偏僻了,没有基站,不好布线等等。。其实真实原因吗,咳咳,大家心里都清楚。。。。
说到这个上网问题,我忍不住又要吐嘈一下。。。凡是用过电信的天翼校园宽带的都会有同一个感受——太坑。。。限制使用路由器,也就是说一个帐号只能一个人用,动态密码6小时一换,投诉电话不知打了多少,电信官方说是为了安全,说什么无线用着不安全。。是的,我承认无线的确存在着不安全性,相比较而言有线的确略微安全一些,不过这不能成为电信打算搞垄断的借口。。。一人一个帐号,说白了不就是想多赚些钱,多获取些利益嘛。。。电信不就是怕如果支持了路由器拨号,一个宿舍就只买一个帐号,然后赚的钱就少了嘛。。。其实这想法完全是没有必要的。。。以我自身的切身经历来说,我曾经也和舍友一起买过可以使用路由器的“黑号”,8M带宽,三个人用。按理说其实也差不多了。。。如果只是打打游戏的话,其实带宽使用量不是很大的。。。但是如果其中有人用诸如迅雷之类的软件下载东西,尤其是几个G的东西,那么迅雷就会把所有的带宽资源都抢占一空,别说打游戏了,连打开个网页都困难。。虽然可以限制资源的利用,但毕竟都是舍友,而且大家都出了钱,这么做也不怎么好意思。。。再加上后来“黑号”被封,我也就再没有和别人合租过无线网。。。
但是如今这个互联网时代,手机上个网最好都是在有无线覆盖的地方。。光靠那每个月300M的数据流量哪够,再加上这边信号又差,有时候都连不上。。为了蹭个无线还要跑去食堂。。。
好像有点跑题了。。。。。总而言之,电信的天翼校园宽带就是坑,吐嘈不完的坑。。。。
言归正传。。。正如上面所说,我现在用的是天翼校园宽带,它是需要专门的拨号软件进行拨号的,而这个拨号软件只有windows和mac两种版本,而我恰恰使用的是Linux。。(电信这是在瞧不起Linux吗,还是瞧不起使用Linux的学生???)因此我为了上个网就必须煞费苦心,比别人多绕点路。。。(我会说我还打了无数个电话去电信那边反应情况吗?可是结果呢。。。。。)
之前我都是在虚拟机中开一个winxp充当网关,让Linux宿主机去共享Winxp的网络。(详细做法:首先确保虚拟机XP中已装天翼校园客户端,然后共享天翼校园客户端生成的网络连接适配器。接着把本地连接的IP和宿主机的IP设置成同一网段,具体来说XP中本地连接IP为192.168.0.1,宿主机中IP为192.168.0.250,网关为192.168.0.1,子网掩码都是255.255.255.0。然后宿主机再设置一个DNS服务器地址,一般为8.8.8.8。不过我有时设成8.8.8.8会无法连接,因此我设成了电信的DNS:218.2.2.2)
这一次,我仍是按以往的步骤打开了虚拟机,帐号是连上了,虚拟机中也可以上网,但是宿主机却无法上网。。。于是开始一步步排查。。。
首先我排除了网线问题,因为之前都是可以用的,而且虚拟机中也可以上网。然后是IP设置问题,双向互ping一下,都可以通,排除两边的防火墙问题(注:如果出现虚拟机可以ping通宿主机,而宿主机ping不通虚拟机,很可能是虚拟机设置了防火墙)。然后检查DNS,通过nslookup可以查找到IP地址,排除。。
现在的问题是:直接ping外网,可以ping通,但就是无法打开网页,一直显示正在连接。。。用netstat查看,果然有大量的SYN_SENT状态。意思就是说我一直再向远端发送连接请求,但是却无法建立连接(TCP三次握手中的过程)。。我上网谷歌百度了一番,有说是设置了代理服务器的,不过我并未设置,查看了一下,的确未设置。也有说是协议问题,要netsh winsock reset,但是未见成效。。。要说感染病毒嘛,看了下进程,没有占用率很大的。。。
最后用wireshark抓了包看了看。我在虚拟机和宿主机上都抓了一下,发现了这样一个现象:
首先先假设我的宿主机的IP为192.168.0.250,虚拟机的本地连接IP为192.168.0.1,连接外网的IP是动态分配的,假设为58.2.2.2。
1、在虚拟机中抓包:192.168.0.250和58.2.2.2都可以从DNS服务器上获取百度的地址,假设为180.3.3.3。然后192.168.0.250和58.2.2.2分别向180.3.3.3发送SYN包,180.3.3.3也分别回了一个SYN+ACK包,但是之后58.2.2.2向180.3.3.3发送了一个ACK包,却不见192.168.0.250的ACK包。
2、在宿主机中抓包:192.168.0.250和58.2.2.2都可以从DNS服务器上获取百度的地址,假设为180.3.3.3。然后192.168.0.250和58.2.2.2分别向180.3.3.3发送SYN包,但是这一次180.3.3.3却只向58.2.2.2发送SYN+ACK回包,看上去就像是发给192.168.0.250的回包被截了一样。。
我不知道如何解决,最后实在没有办法,只好重装了虚拟机,好在问题也在重装后解决了。。。。