实现需求
硬件:
- 具备公网IP的主机(此处使用阿里云服务器)
- 连接校内网的主机(此处使用运行Ubunt系统的虚拟机)
软件:
- frp(内网穿透工具)
- squid(代理服务器工具,UNIX/linux主要采用Squid实现代理服务器功能)
实现原理
- 为什么要云服务器?
校园网(校内网)是一个具备严格防火墙的局域网,公网上的设备并不能够直接访问校内网的各种资源,为了实现外网能够访问校园网,我们有两种思路,一在具备公网IP地址的云服务器和校内主机上都安装frp软件,实现内网穿透功能。二是在校内主机上架设VPN服务器,校外设备通过VPN连接校内网访问校内资源。本文采用第一种方式。
- 为什么要代理服务器?
代理服务器能够监听设备上的端口,一旦端口接受到访问请求,代理程序会按照预先设定的配置将端口中接收到的访问请求转发并返回请求内容,在校内主机上安装
Squid软件,从而将校内主机变为代理服务器,能够转发来自校外设备的浏览器请求。
实现内网穿透
云服务器安装frp-server
获取frp软件
cd /usr/local/src #进入此目录
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz #下载frp
tar -xvf frp_0.38.0_linux_amd64.tar.gz #解压;frp文件
cd frp_0.38.0_linux_amd64/ #进入解压后的frp文件夹
ls #浏览文件夹
可见frp文件夹中包含了frpc和frps两个可执行文件,frpc即frp-client(客户端),frps即frp-server(服务端)
配置frp服务器端配置文件frps.ini
用vim命令打开frps.ini文件
[common]
bind_port = 7000 #frp使用的端口
dashboard_user = admin #流量监控的账户 自己设置
dashboard_pwd = 123456 #流量监控的密码 自己设置
dashboard_port = 6440 #流量监控程序的端口,搭建完成之后用 云服务器IP:6440 就可以打开流量监控网页程序
启动frp服务端
nohup ./frps -c ./frps.ini &
注:nohup的作用是让我在关闭Xshell远程连接时,frp服务端不会跟ssh进程一起关闭。
参考文档:
解决Linux关闭终端(关闭SSH等)后运行的程序自动停止
在linux后台运行脚本命令和程序的方法大全
注意事项
国内云服务器大多都要配置安全组的,以阿里云为例,配置规则里更改访问规则,从而打开需要用到的端口。
在校内主机安装frp-client
cd /usr/local/src #进入此目录
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz #笔者这里用的版本和云服务器的一样,读者在Github选择自己合适的版本
tar -xvf frp_0.38.0_linux_amd64.tar.gz #解压文件
cd frp_0.31.1_linux_amd64/
ls
配置frp客户端配置文件frpc.ini
用vim命令打开frpc.ini文件。
[common]
server_addr = <你的云服务器IP地址>
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22 #local_port端口是校内主机的ssh端口号
remote_port = 6001 #remote_port端口是云服务器的端口号。此端口自己设置,实现当你用Xshell连接 云服务器IP地址:6001即是在连接你校内主机的SSH端口
启动frp客户端
./frpc -c ./frpc.ini #若需要关闭终端后仍继续运行,参考上文云服务器端命令
测试frp是否搭建成功
用Xshell连接,连接地址填 云服务器IP地址:6001,用户名和密码填校内主机的。如果ssh能够成功连接,则成功实现内网穿透。
frp官方提供的教程:通过SSH访问内网机器
校内主机实现代理服务器功能
校内主机安装Squid软件
安装软件
yum install squid -y
yum install httpd-tools -y
#以上两命令适用于centos
apt install squid -y
apt install apache2-utils -y
#以上两条命令适用于Ubuntu
生成密码文件
mkdir /etc/squid3/
#ikaros 是用户名
htpasswd -cd /etc/squid3/passwords ikaros
#提示输入密码,比如输入123456
测试密码文件
/usr/lib64/squid/basic_ncsa_auth /etc/squid3/passwords
#输入用户名 密码
ikaros 123456
#提示ok说明成功
ok
#ctrl+c退出
配置squid.conf文件
vim /etc/squid/squid.conf
#在最后添加
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid3/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
# And finally deny all other access to this proxy
http_access allow all
# Deny CONNECT to other than secure SSL ports
http_access allow CONNECT !SSL_ports
#这里是端口号,可以按需修改
#http_port 3128 这样写会同时监听ipv6和ipv4的端口,推荐适应下面的配置方法。
http_port 0.0.0.0:3128
squid软件相关命令
#启动start
systemctl start squid.service
#停止stop
systemctl stop squid.service
#重启stop
systemctl restart squid.service
#配置开机自启动
systemctl enable squid.service
#关闭开机自启动
systemctl disable squid.service
#查看运行状态
systemctl status squid.service
参考教程:Centos7搭建Squid代理服务器
修改校内主机frp客户端配置文件frpc.ini
我们在4.1步骤里添加了校内主机3128端口为代理服务器的端口,所有到此端口的浏览器请求都会被此端口转发出去。
此时我们还得更改校内主机frp客户端配置文件frpc.ini,从而使云服务器所收到的浏览器请求转发到校内主机的3128端口。
Xshell以root身份连接校内主机
cd /usr/local/src/frp_0.38.0_linux_amd64/ #进入校内服务器的存放frp文件的目录
vim frpc.ini
#在最后添加
#[proxy-http]
#local_ip = 127.0.0.1
#local_port = 3128
#remote_port = 8000 此端口自己设置,步骤五会用到。
重启frp客户端
nohup ./frpc -c ./frpc.ini &
如果报以下错误,说明之前的frp客户端还没关闭。关闭方法可kill此进程,具体方法百度如何重启frp客户端。
验证
到了这一步,校园网代理就算搭建完毕,可以直接使用windows连接我们的代理。看校外的笔记本电脑是否呢能够免费下载知网,以及顶会期刊论文。
打开windows菜单->设置->网络与Internet->代理
在地址一栏填上你的云服务器IP地址,端口填8000(在4.2这一步设置的),然后打开使用代理服务器的开关
然后打开浏览器,就可以成功访问校园网资源