我们经常会遇到这样的问题: 有些网站只能连接特定的网络才能访问,比如要想访问学校的选课网站只能连接校园网或者使用 vpn 才能成功访问。如果你处于外地并且没有 vpn 的情况下就很麻烦。所以我想分享的是如何把局域网的主机用做代理服务器来解决这样的问题。
要求:
有一台处于局域网的电脑用做代理服务器。
有一台处于公网的服务器用于访问。
Proxy SwitchyOmega
为了便于查看效果,我使用的是谷歌浏览器的 Proxy SwitchyOmega
插件来查看代理是否设置成功。这款插件可以方便的配置谷歌浏览器的代理信息。直接下载安装即可,这步不是必须的,不喜欢可以直接跳过。
设置代理服务器
为了实现代理的功能,我们需要将处在局域网的主机设置为代理服务器。
代理服务器的基本行为就是接收客户端发送的请求后转发给其他服务器。代理不改变请求 URI,会直接发送给前方持有资源的目标服务器。
持有资源实体的服务器被称为源服务器。从源服务器返回的响应经过代理服务器后再传给客户端。
在这里我使用的是tinyproxy
,它可以轻易的把你的主机变为一个代理服务器。
首先安装:
sudo apt-get install tinyproxy
之后找到配置文件 /etc/tinyproxy.conf
:
将
#Listen 192.168.0.1
改为:
Listen 127.0.0.1
代表监听本机地址, 默认的监听端口为 8888
,当然也可以在配置文件中找到并修改。
接下来我们可以直接启动代理服务:
sudo service tinyproxy start
为了验证是否代理成功,使用之前的谷歌插件。
找到谷歌浏览器左上角 Proxy SwitchyOmega
插件,点击选项。
配置代理服务器为本机 127.0.0.1
, 端口8888
。点击应用选项。
启动代理:
任意访问网页,只要成功访问网页就说明代理成功了。
ssh 内网穿透
虽然我们的电脑已经成为代理服务器了,但是它处于局域网,我们并不能访问得到,在此我们需要一台公网服务器,实现的原理是将公网服务器作为跳板,从而使得我们局域网的主机能够访问得到。
首先我们需要 auto-ssh
这个工具,在 ssh
连接中,如果长时间不发送数据报,ssh 隧道会断开,使用 auto-ssh
它能保证我们连接的 ssh 隧道不会被中断。
sudo apt-get install autossh
接下来就可以直接使用命令将主机内网穿透了:
autossh -M 6389 -o "StrictHostKeyChecking=false" \
-o "ServerAliveInterval 10" -o "ServerAliveCountMax 10" \
-NR 20000:localhost:8888 admin@39.106.231.37
这里 -M 6389
代表 auto-ssh
使用的端口,随意分配。-o
后边的参数是关于 auto-ssh
配置的。-NR 服务器端口:localhost: 本地端口
代表将服务器20000
端口转发到本机 8888
端口,也就是说,当你访问服务器 20000
端口时,数据将会转发到我们的代理服务器上,完成内网服务器的代理,在这里需要保证服务器上的 20000
端口是打开的。admin@106.14.80.210
则是你服务器的 ssh
连接。
注意,为了能使 ssh 反向转发,我们需要修改服务器端的配置文件 /etc/ssh/sshd_config
,打开GatewayPorts
开关:
GatewayPorts yes
到此反向穿透的配置完了,我们可以使用 curl 验证代理服务器是否配置成功。
curl -x 39.106.231.37:20000 www.baidu.com
-x
表示使用代理, 后边的参数则代表公网服务器和反向转发的端口,请求 www.baidu.com
这个网址,如果你返回的是一大堆 html 代码,则表示配置成功了。