我搭建这个的目的在于有时候工作中解决电脑问题的时候外网访问太慢,又不想在别人电脑上弄个代理程序,希望用系统本身支持的代理协议来连接,比如outlook的登录页有时候打开奇慢,之前还被墙过一两天,等网页加载的时间本来那可都是摸鱼时间啊,早解决早摸鱼,弄个Xray出来弄完再删太麻烦。
http/socks肯定是不能放公网的,所以只能弄https,但是搭https的时候发现*ray的stream里tls系统认不了,我又换了sing-box,https是标准的,但是用户名密码认证不标准,正常应该是浏览器跳个basic认证出来,然后输入用户名密码,但是sing-box这个不行,只能用代理工具设置用户名密码,其实不加认证也可以用,就是要用得时候打开,不用的时候关掉,但是这太蠢了,我拒绝,最后只能用squid来搭建。
首先这肯定是不能用来过墙的,应该在国内搭建squid连上游http代理配合*ray、clash等工具。
我是在windows下搭建的,linux就不说了,大多数服务端程序我觉得用linux会比windows更简单,主要是教程多问题少,在官网找到squid for windows下载安装程序,需要用管理员权限打开,可以在具有管理员权限的cmd中运行msiexec /package squid.msi,会自动装成服务,在托盘图标中可以手动打开和关闭。
创建文件C:\Squid\etc\squid\.auth,这个文件中的内容是用htpasswd指令生成的,可以找个网站上生成,也可以windows下个Apache,在bin目录下有htpasswd,又或者找个linux系统安装一下apache2-utils,然后(windows/linux都一样)执行htpasswd -nb admin 111,在终端中会显示一行用户名:密码,把这行添加到C:\Squid\etc\squid\.auth中就可以了,用什么文本编辑器都可以,比如记事本。
以默认安装路径(C:\Squid)为例,编辑文件C:\Squid\etc\squid\squid.conf,尽量在看起来差不多的地方加,不要全往配置文件的最后加,将以下配置加下配置文件
#添加basic认证
auth_param basic program /lib/squid/basic_ncsa_auth /etc/squid/.auth
auth_param basic children 5
auth_param basic realm Proxy Authentication Required
auth_param basic credentialsttl 1 hours
auth_param basic casesensitive off
acl auth_user proxy_auth admin
http_access allow auth_user
acl all src 0.0.0.0/0.0.0.0
#连接上游http代理,自己改需要的端口
cache_peer 127.0.0.1 parent 7890 0 default
never_direct allow all
#添加https监听端口,指定证书文件和私钥文件,文件格式需要为pem,证书怎么获得我就不多说了
https_port 1443 cert=C:/full.crt key=C:/key.keysquid.conf有的路径非常像linux,不过这就是仿linux路径,没有写错。
windows会遇到没法完成认证的问题,无论是squid本身自带的basic还是在上游做认证都一样会出问题,问题的原因在于basic_ncsa_auth缺个cygcrypt-2.dll,把这个文件放到C:\Squid\bin和C:\Squid\lib\squid就可以了,这个dll可能是打包的时候忘记打包进去了,虽然我这里给出了下载链接,但是这是我自己放得不能保证以后永远可用,所以我还是有必要说一下这个文件该怎么去找到,首先去cygwin中下载安装程序,名字可能叫setup-x86_64.exe,打开后从互联网安装,下载站点随便选一个,比如阿里云的,然后搜索Libcrypt2,在新增中选择一个版本而不是跳过,比如我用得是4.4.20.1,在安装完成后需要的文件就在C:\cygwin64\bin\cygcrypt-2.dll。
在做完这些之后虽然已经可以开始使用,但是搭过代理的都知道,主动探测检查是很重要的,这个时候访问这个端口甚至连主机名信息都会显示出来,这肯定是不行的,所以我们要指定一个错误信息文件,然后那个文件是空的即可,在C:\Squid\etc\squid\squid.conf中添加以下内容
error_directory /usr/share/squid/errors/0squid.conf然后找到C:\Squid\usr\share\squid\errors,在其中建立文件夹0,随便将某个语言的错误信息放到0中,然后将所有文件中的信息全部清除,用记事本就行,不过我这里把所有文件都打包了,这样访问端口只能得到错误代码而没有任何信息,虽然主动探测特征依然非常大不过现在没有关键信息了并不重要。