抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

以前的一篇博客讲过如何搭建反向代理服务器,从而实现在校外登录校内集群,详情点击这里。本篇博客主要记录下如果想要在校外登录学校教务平台、登录学校购买的数字资源库应该如何实现。

1. 实现思路

首先要更正一下前一篇博客的错误之处,学校集群是有公网ip的,只是限制了ip访问

使用的工具仍然是frp,需要的设备是一台在校内24h不断电的服务器(本篇博客中的校内集群),以及一台有公网ip的校外服务器(本篇博客中是我的轻量云服务器)。

上篇内网穿透博客记录的是典型的反向代理过程,将校内集群ssh登录的端口映射到校外服务器的其他端口,通过访问该端口登录校内集群,整个代理过程客户端无法得知服务端的真实ip和端口,可以做到隐藏服务端真实信息、确保服务端安全。

而我们这里想要登录校园内的其他网站、使用校园网ip登录知网万方等数据库的话,就需要用校内集群转发我们的http请求,将请求返回的结果通过校外服务器中转后返回给我们,按照我的理解,这是一个正向代理+反向代理结合的过程。

反向代理:隐藏了服务端,我并不知道我访问的实际是校内集群(输入的是校外服务器的ip地址和端口)。

正向代理:隐藏了客户端,集群将http请求转发到校内网站和学校买的数据库网站(后者并不知道发出请求的实际是校外服务器)。

校内集群在整个过程中信息完全被隐藏,校外服务器起到中转的作用,最后将http请求返回的结果传递给我们

2. frp配置

2.1 service端配置

frps安装在校外服务器上,frps.ini配置文件完全不用修改,这里就顺便展示一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[common]
bind_port = 7000 # frp监听的端口,默认7000,可改
bind_udp_port = 7400 # UDP通讯端口,可不设置,用于点对点穿透
token = xxxxxxxx # 安全考虑需要设置口令,client端需要用到

dashboard_port = 7500 # frp管理端口,可改
dashboard_user = xxxx # 管理端口认证的用户名,用于身份识别,自己设置
dashboard_pwd = xxxx # 管理端口认证的密码,用于身份识别,自己设置
enable_prometheus = true

subdomain_host = xxx.xxx.xxx # 设置子域名,主要方便登录管理界面。不用ip地址,用域名+端口的方式直接访问

log_file = /usr/local/frp/frps.log # frp日志配置,这里是记录3天的日志信息
log_level = info
log_max_days = 3

2.2 client端配置

frpc安装在校内集群,frpc.ini配置文件修改如下

1
2
3
4
5
6
7
8
9
[common]
server_addr = xxx.xxx.xxx.xxx # 填写你的service端服务器公网ip,这里我写我的云服务器ip
server_port = 7000 # 前面设置的frp监听端口,需要保持一致
token = xxxxxxxxx # 前面设置的口令

[http_proxy] # 这里只演示http代理,有ssh需求的自行加入,其他参考frpc_full.ini
type = tcp
remote_port = xxxx # 映射的service端服务器的端口,自己定义
plugin = http_proxy # http代理插件(frpc自带)

2.3 开放端口,开启frp服务

service端(也就是校外服务器)开放上一步client端设置的服务器端口,重载防火墙

分别在service端和client端后台不挂起运行frps和frpc(对应文件夹中运行)

1
2
nohup ./frps -c frps.ini &
nohup ./frpc -c frpc.ini &

service端可以查看运行日志frps.log文件,端口监听成功即可;client端可以查看nohup文件的运行结果(最好定时清一下,否则这个文件会很大)。

如果想要停止frp服务,查看任意service端或者client端的frp程序进程,结束即可

1
2
ps -aux | grep frp	# 查看任务进程号
kill -9 进程号 # 结束任务进程

3. 代理实现

按照上面步骤搭建好代理服务器,我们只需要在电脑上设置代理地址和端口,就可以在电脑上用外网访问校园内网和数据库网站了。

上面的图片我就不放真实信息了,根据图片意思设置即可,一般来说教程到这里就可以结束了,但是仅仅如此还不够优雅

如果不对地址进行限制,那么所有http访问都将通过代理进行,即全局代理,一般情况下我们是不希望如此的。举个例子,如果访问的是localhost,我们一般是用直连(Direct);访问限制ip的特定的网站走代理服务器(Proxy);访问不限制ip的网站仍然用直连,因为直连速度最快,只受你电脑带宽限制。

如果访问所有网站都用代理的话,比如我的小破服务器就1M带宽,速度就很感人了……

简单讲一讲三种方法优雅地实现校园网代理

3.1 使用设置脚本

没错就是手动设置代理上面那个选项,这个脚本是以**.PAC为扩展名的JavaScript脚本**,决定http请求是通过直连目标还是通过代理的方式连接。

pac文件中使用的JavaScript 函数可以在官方查到用法,这里做个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function FindProxyForURL(url, host) {
//设置代理池
var proxy1 = "PROXY xxx.xxx.xxx.xxx:xxxx";
var proxy2 = "PROXY xxx.xxx.xxx.xxx:xxxx";

//本地地址直连
if (isPlainHostName(host)) {
return "DIRECT";
}
// 代理1
if (shExpMatch(url, "*.cnki.com/*")) {
return proxy1;
}
// 代理2
if (shExpMatch(url, "*.wanfangdata.com.cn/*")) {
return proxy2;
}
return "DIRECT";
}

将上面的文件保存为.pac格式文件,代理池部分填写前面做的代理服务器ip和端口(当然我只有一个代理服务器,根据需要自己改),需要代理的网址这里可以用shExpMatch函数进行正则匹配,完成后再设置自动设置代理部分。打开自动检测设置和使用设置脚本,将.pac文件的地址(可以是本地地址或者放在你自己的服务器上,能访问到就行)贴到脚本地址栏。

接下来就可以愉快地访问学校购买的数字资源啦并且上其他网站因为是直连网速也不会变慢

3.2 使用其他代理软件

代理软件种类繁多,相比直接设置脚本,代理软件往往还提供更多更直观的方式控制http代理方式,这里就简单介绍个软件Proxifier

设置方法与手动设置大同小异(手动设置的代理规则比较反人类),同样是设置代理服务器ip,端口,可以设置不同的协议,还可以启用验证保证安全。

设置代理规则

代理规则就不一一细说了,这个软件就是比较直观,而且还可以记录代理产生的流量等等。

3.3 做个切换全局代理工具

如果是自己用的话,使用代理脚本是最简单最优雅又不费事的方法。

如果要给同一个实验室其他人分享,又怕别人电脑不安全(直接分享脚本会导致源码泄露,万一别人电脑被黑了自己服务器的信息就被暴露了),就可以做一个代理工具,别人用得着的时候开启,用不着的时候就关闭(全局代理的重要性,就算忘记关闭代理,看到别的网页速度变慢了,也就会想起来去关闭代理了),可以一定程度上保护自己服务器的安全,又简化别人设置代理的步骤,一举两得哈哈~

实现方式就是做一个批处理,然后将bat转化为exe即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@echo off
for /f "tokens=1,2,* " %%i in ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable ^| find /i "ProxyEnable"') do (set /A ProxyEnableValue=%%k)

if %ProxyEnableValue% equ 0 (
echo 正在开启知网代理,请稍候...
ping -n 2 127.0.0.1>nul
echo=
echo 获取注册表中代理启用状态......
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
ping -n 2 127.0.0.1>nul
echo=
echo 设置代理服务器......
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d "xxx.xxx.xxx.xxx:xxxx" /f
ping -n 2 127.0.0.1>nul
echo=
echo 代理已开启,请阅读弹窗内容并按确认键关闭本窗口...
echo=
echo 知网一键代理工具 Version 1.0
echo 版权所有 塔里木大学研发中心405. 保留所有权利。
echo 该工具由405实验室内部开发,仅供本实验室人员使用,切勿外传。
echo msgbox"代理开启期间网速会变慢,使用完毕后请再次点击该工具结束代理!",0,"提示"> %tmp%\\tmp.vbs
cscript /nologo %tmp%\\tmp.vbs
del %tmp%\\tmp.vbs
) else if %ProxyEnableValue% equ 1 (
echo 正在关闭知网代理,请稍候...
ping -n 2 127.0.0.1>nul
echo=
echo 获取注册表中代理启用状态......
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
ping -n 2 127.0.0.1>nul
echo=
echo 清除代理服务器设置......
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d "" /f
ping -n 2 127.0.0.1>nul
echo=
echo 代理已关闭,请按确认键退出本窗口...
echo=
echo 知网一键代理工具 Version 1.0
echo 版权所有 塔里木大学研发中心405. 保留所有权利。
echo 该工具由405实验室内部开发,仅供本实验室人员使用,切勿外传。
echo msgbox"再见。",0,"提示"> %tmp%\\tmp.vbs
cscript /nologo %tmp%\\tmp.vbs
del %tmp%\\tmp.vbs
)

上面的内容文件保存为.bat后缀文件(有中文的话,保存时编码格式要改为ANSI),只需修改xxx.xxx.xxx.xxx:xxxx部分为你前面设置的代理服务器ip和端口即可。

原理就是获取注册表中代理服务的开启状态,转化为另一种状态, ping -n 2 127.0.0.1这个只是为了使用者有参与感……延迟两秒进行下一步处理hhhhhh

最后网上找个图,转成icon格式作为图标,然后将bat批处理格式文件转化成exe可执行程序文件即可,我这里用的Bat_To_Exe_Converter这个软件,转成exe源码不容易被泄露,而且怎么说呢看上去给人感觉也稍微正式一点(bushi)

大概就是这样,每双击一次应用程序,切换全局代理的状态为开或者关

4. 注意

浏览器是会缓存ip信息的,无论使用何种方式开启代理,最好都先关闭浏览器之后重新打开。

欢迎小伙伴们留言评论~