基于路由器的steam社区本地反代
前言
众所周知,steam社区在国内一直是无法访问的状态。但是steam社区使用的cdn akamai在国内是可以直接连接的,被屏蔽的只是steam社区的域名而已。
这意味着可以进行本地反代,在本地假设一个web服务器反向代理steam社区,然后将steam社区域名指向本地的web服务器。这样本地在访问steam社区时是通过可以正常连接的ip而不是被屏蔽的域名,就可以实现正常访问steam社区。例如steamcommunity302和steam++(现在改名叫Watt Toolkit)都是如此原理
但是每次要访问社区都专门打开软件太不优雅了,所以不如让web服务在路由器常驻,将上述过程交给路由器即可
这里我使用openwrt进行演示,不过理论上只要能运行nginx等web服务的路由器都能运行。
注:以下默认你的路由器ip是192.168.1.1,如果不是,请自行修改为你的路由器ip
安装nginx
1.修改uhttpd端口(修改后进入OpenWrt管理页面要用 192.168.1.1:8080,修改端口目的是要让出80端口给Nginx使用)
虽然实际上不修改也行,访问steam社区使用的是https,占用的是443端口。但是必须保证每次访问steam社区时都是通过https访问。而且还得修改掉nginx默认的80端口,所以我认为修改openwrt的端口更为稳妥
1 |
|
2.安装nginx软件包(也可以进web页面手动安装)
1 |
|
找出你的网络中可以正常使用的Akamai ip
这里我使用UsbEAm Hosts Editor工具进行查找
可以看到,我的网络中,几个来自香港的ip延迟比较低而且能ping通,记录下这些ip
生成并安装本地证书
https在访问过程中需要一个受系统信任的证书,这里我推荐直接使用steamcommunity302,这个工具可以很方便的生成和安装证书
打开该工具的设置后将证书年限改为十年,点击重新安装证书。过一段时间后,即可看见在该工具的根目录下出现了steamcommunity.key和steamcommunity.crt。我们将这两个文件上传到路由器的/etc/nginx/conf.d目录下(可以使用winscp通过scp协议上传,也可以在路由器安装sftp-server通过sftp协议上传)
配置nginx
修改路由器的nginx配置
vi /etc/nginx/conf.d/steam.conf
1 |
|
将上边的184.50.87.18改成你通过UsbEAm Hosts Editor找到的可用的Akamai ip
之后启动nginx
1 |
|
没有报错的话就是正常启动了
之后我们还需要修改hosts,让电脑在访问steam社区时能够解析到openwrt的ip
1 |
|
这样我们的电脑在解析steamcommunity.com这个域名时就会自动解析到192.168.1.1
完成
打开steam,可以看到steam社区已经可以正常打开
由于是基于路由器端的,除了本地设备要安装证书以外,本地设备完全无感
局限与不足
- 必须关闭ipv6,否则会导致解析出steam社区的ipv6地址,使得电脑在访问时直接访问ipv6地址,而没有经过路由器的反向代理(理论上windows可以靠修改ipv4优先级解决,请自行使用搜索引擎)
- 必须使用路由器dns(openwrt默认的dhcp分配的就是路由器dns,所以只要你没有修改的话问题不大),否则会导致路由器上的hosts对你的电脑不生效(当然你也可以手动修改电脑的hosts解决)