关于上网你可能需要知道的那些事

上网对我来说一直不是一件容易的事情,小时候是拨号上网,那时候要从电话线分出两根到 56K Modem 上,不仅速度只有 1KB 不到,贵到 9 块钱一小时,而且还要根据拨号的声音来判断是不是能播上。

即使真的连接上了,也不能用来干什么,开个网页要等很久,只能聊聊 QQ,后来发现可以用脱机工作缓存网页,于是缓存了很多 Flash 游戏和新闻,没事点开这些缓存的东西回味回味,虽然很苦逼,但是那时候对网络的向往是痒到骨头里的。

而那个时候因为这种向往,开始用 FrontPage 来做一些网页,收录自己写的小说啊,日记,图片之类的。后来从 2M 的网络逐渐到了今天 100M,虽然网速越来越快了,但是却很怀念 2008 年之前可以打开任何网站的时候,也很怀念那时候用 20M 一月的流量上 Twitter 的时候,现在很多的朋友也都是那时候认识的,一起耍 Linux,一起愤青。

回到现在这个日益紧绷的时代,以我目前所了解的知识,聊一聊上网这件事。

首先你要有个工具

我经常看到很多人用 shadowsocks 上网,shadowsocks 最大的优点是在网络环境较差的时候(高丢包,高延迟)的时候,做一些轻量级的上网是最佳方案,比如搜索一下啊,看看 Twitter,但是缺点也很明显,相比起 VPN

1.不能完美代理所有协议 2.耗 CPU 很高,不能作为路由器上的代理方案 3.更容易被干扰

shadowsocks 是一种自定协议,并没有企业在使用,所以当局对其是可以肆无忌惮的封锁的。

那么除了这个,还有一些就是 Lantern 或者 Tor 这种,Lantern 的代理方案相对复杂,多种方式结合,但是因为其提供的是公开免费的服务,当局当然是第一时间要消灭掉的,Tor 就更别说了,Lantern 的前车之鉴,所以不要使用公开提供的免费服务,这些都是很快会被搞掉的东西。

因此在这个环节,我强烈推荐的是 VPN,VPN 也有多种协议,PPTP,L2TP,OpenVPN,IPSec,那么究竟哪种比较好呢?

其实这个环节的选择是比较复杂的,因为 VPN 不仅仅是你和服务器之间的事情,也受到中间运营商的影响(比如某个路由上没有开 VPN 穿透)这并不是墙犯的错,而是运营商的不靠谱。

有的运营商 PPTP 很好,但是不能用 L2TP,有的 L2TP 很好,但是不能用 PPTP,所以这两个需要自己尝试,OpenVPN 现在应该是全面挂掉了(原因同 shadowsocks,没有企业在用,可以肆无忌惮的搞掉)。

如果是桌面端使用,那么 PPTP(最快) 和 L2TP(更安全,但是会比较慢) 是最好的,IPSec 在桌面上并没有什么优势,首选 PPTP。

你并不需要担心 PPTP 的安全性问题,墙不会动用超级计算机对你的链接进行实时解密的,如果你已经混到了这种待遇,那么任何翻墙手段对你来说都不能保密。

PPTP 有个很常见的问题是 MTU 配置导致的不能连接问题,如果你的 VPN 在家里用的好好的,换个网络不能用了,或者手机 3G 能用,但是连 WiFi 不能用,那么通常就是 MTU 的问题。MTU 可以在路由器里修改。你可以搜索下相关的资料,一般设置为 1350 可以解决这个问题。

你要选择一个好的服务器

选择了 VPN,到某家买了服务,你接下来要做的就是连接上去了,这个环节往往是最让人抓狂的时候。首先你需要能够判断哪台服务器会比较通畅。通常来说,北方的用户选择日本线路,南方的选择东南亚的线路是比较快的。但是也需要你自己测试。

例如我的 VPN 服务器域名是 baidu.com,那么我可以在终端用 ping -c 10 baidu.com 来测试延迟

ping -c 10 baidu.com 

这是我的结果

PING baidu.com (220.181.57.217): 56 data bytes
64 bytes from 220.181.57.217: icmp_seq=0 ttl=53 time=43.792 ms
64 bytes from 220.181.57.217: icmp_seq=1 ttl=53 time=43.890 ms
64 bytes from 220.181.57.217: icmp_seq=2 ttl=53 time=43.750 ms
64 bytes from 220.181.57.217: icmp_seq=3 ttl=53 time=43.904 ms
64 bytes from 220.181.57.217: icmp_seq=4 ttl=53 time=43.064 ms
64 bytes from 220.181.57.217: icmp_seq=5 ttl=53 time=44.528 ms
64 bytes from 220.181.57.217: icmp_seq=6 ttl=53 time=43.664 ms
64 bytes from 220.181.57.217: icmp_seq=7 ttl=53 time=43.643 ms
64 bytes from 220.181.57.217: icmp_seq=8 ttl=53 time=44.991 ms
64 bytes from 220.181.57.217: icmp_seq=9 ttl=53 time=43.697 ms

--- baidu.com ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 43.064/43.892/44.991/0.498 ms

那么可以看出延迟是 45ms 左右,丢包率 0%,说明这是一个稳定快速的线路,通常如果你的线路延迟不超过 200ms,丢包不超过 1% 那就还是可用的线路。

但是延迟并不能代表一切,你还要遭遇另外一个问题,就是带宽。

带宽有 3 种情况需要面对

1.电信商限速,当前时段能分给你的只有那么多

如果那时候有太多人在上外网,你也会很慢,如果你办的是杂牌运营商,这种情况就更常见了。不过有一种很取巧的方法是重启光猫来获取新的 IP,说不定就会把你分配到一个比较宽裕的线路上。

2.多人拥挤 VPN 服务器,每个人能分到的不多

VPN 服务器一般都是 100M 的带宽,但是如果有 3 个 VPN 用户在看 Youtube,那么你也就没速度了,这种一般在晚上高峰期的时候很常见。

3.你的宽带优先级较低,让路給光纤用户

如果你办的是小水管,那么更多的出国带宽是让给精品网和光纤用户的,你也不能跑到最快的速度。

所以选择了服务器之后,一定要进行测速,推荐 http://speedtest.net

如果想要解决以上三个问题,那么方案就是多掏钱。办最快的上网线路,用最好的机房搭建自己的专属 VPN 线路。

###还要花钱买好线路

中国的国际出口并不多,这是官方的一张国际出口带宽分布图。

上海,北京,广州三大出口,每个出口都有最佳线路,国内这么多电信运营商,也就三家有自己的出口,所以选择的时候,要么联通电信,最差移动,其他的能不选就不选吧。

另一方面,同样是上海 - 新加坡,可以走 上海-日本-新加坡,也可以走 上海 - 香港 - 新加坡,后者要比前者快很多,线路也要贵很多。

所以如果要自己做代理服务器,那么你的线路是怎么和中国连接的就成了最大的瓶颈。又便宜又好的线路很快就会被抢占完变成坏线路,例如 Linode。

打造一个属于自己的网络

这里指的就是家里应该有一个可以刷 openWRT 的路由器,由此你可以把 VPN 配置到路由器上,并配置好策略路由,以实现家里的完美环境。

策略路由

所谓的策略路由,就是当你上国内的网络的时候,直接走国内线路,访问国外的时候,则走 VPN,网上有很多教程,你需要找到一个适合自己的路由器的。

如果你成功走到了这一步,应该已经小爽了一把,但是还有很多问题需要你去解决。

DNS 污染问题

当局污染 DNS 主要采用的是解析抢答模式,所以一旦你的 VPN 突然断开了,那么很可能各种域名都解析出了错误的答案,如果你的 VPN 正常,但是不能打开网页,考虑是不是这个原因,可以通过开飞行模式,重连 Wi-Fi,刷新系统 DNS 缓存等来解决。

路由器性能问题

openWRT 在 NAT, WiFI 等性能上都是会弱于原厂固件的,所以很可能作为中央路由使用的时候,会遇到性能瓶颈问题,花大价钱买个双核路由器也是很好的改善生活的方法。

后记

希望这篇文章可以让你在被折腾的痛苦不堪的时候,可以有一个排查思路。