基于路由器的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
3
4
5
6
vi /etc/config/uhttpd
#按 i 进入编辑模式,
list listen_http '0.0.0.0:80' --> list listen_http '0.0.0.0:8080
list listen_http '[::]:80' --> list listen_http '[::]:8080'
#按ESC键 跳到命令模式,然后输入 :wq 保存文件并退出vi, 重启uhttpd
/etc/init.d/uhttpd restart

2.安装nginx软件包(也可以进web页面手动安装)

1
2
opkg update
opkg install nginx

找出你的网络中可以正常使用的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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server
{
listen 80;
listen 443 ssl;
server_name steamcommunity.com;

ssl on;
ssl_certificate /etc/nginx/conf.d/steamcommunity.crt;
ssl_certificate_key /etc/nginx/conf.d/steamcommunity.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;

location / {
proxy_pass https://184.50.87.18/;
proxy_set_header Host $http_host;
}
}

将上边的184.50.87.18改成你通过UsbEAm Hosts Editor找到的可用的Akamai ip

之后启动nginx

1
2
service nginx start
service nginx enable

没有报错的话就是正常启动了

之后我们还需要修改hosts,让电脑在访问steam社区时能够解析到openwrt的ip

1
2
3
vi /etc/hosts
#输入下列内容
192.168.1.1 steamcommunity.com

这样我们的电脑在解析steamcommunity.com这个域名时就会自动解析到192.168.1.1

完成

打开steam,可以看到steam社区已经可以正常打开
文章配图
由于是基于路由器端的,除了本地设备要安装证书以外,本地设备完全无感

局限与不足

  1. 必须关闭ipv6,否则会导致解析出steam社区的ipv6地址,使得电脑在访问时直接访问ipv6地址,而没有经过路由器的反向代理(理论上windows可以靠修改ipv4优先级解决,请自行使用搜索引擎)
  2. 必须使用路由器dns(openwrt默认的dhcp分配的就是路由器dns,所以只要你没有修改的话问题不大),否则会导致路由器上的hosts对你的电脑不生效(当然你也可以手动修改电脑的hosts解决)

基于路由器的steam社区本地反代
https://zhmoegirl.com/posts/7b1b67ee672a/
作者
InternetBugs
发布于
2024年7月29日
许可协议