Site updated: 2023-09-09 23:09:09
This commit is contained in:
1 parent
2792046524
commit
6dce1a8725
166 files changed
+187
-187
No files matched your search
@@ -25,11 +25,11 @@
|
||||
<title>squid+stunnel 科学上网</title>
|
||||
<link>https://hitoli.com/2023/09/09/squid-stunnel-%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/</link>
|
||||
<pubDate>Sat, 09 Sep 2023 16:48:17 +0800</pubDate>
|
||||
<description><![CDATA[ <h6 id="前言"><a class="anchor" href="#前言">#</a> 前言</h6>
|
||||
<p>科学上网的方法有多重,有很多第三方提供的免费方案,这些方案优缺点暂时不予讨论。实际工作生活中还是会有需要自己搭建的情况,这次介绍的是使用 squid+stunnel 方案进行搭建。</p>
|
||||
<h6 id="准备"><a class="anchor" href="#准备">#</a> 准备</h6>
|
||||
<description><![CDATA[ <h4 id="前言"><a class="anchor" href="#前言">#</a> 前言</h4>
|
||||
<p>科学上网的方法有多种,有很多第三方提供的免费方案,这些方案优缺点暂时不予讨论。实际工作生活中还是会有需要自己搭建的情况,这次介绍的是使用 squid+stunnel 方案进行搭建。</p>
|
||||
<h4 id="准备"><a class="anchor" href="#准备">#</a> 准备</h4>
|
||||
<p>一台可以访问外网的服务器,如香港的云主机并安装 Ubuntu 系统。</p>
|
||||
<h6 id="squid部分"><a class="anchor" href="#squid部分">#</a> squid 部分</h6>
|
||||
<h5 id="squid部分"><a class="anchor" href="#squid部分">#</a> squid 部分</h5>
|
||||
<ul>
|
||||
<li>1、安装</li>
|
||||
</ul>
|
||||
@@ -48,7 +48,7 @@
|
||||
<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token comment">#dns 服务器地址</span></pre></td></tr><tr><td data-num="2"></td><td><pre>dns_nameservers 8.8.8.8 8.8.4.4</pre></td></tr><tr><td data-num="3"></td><td><pre>dns_v4_first on</pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token comment"># 监听端口</span></pre></td></tr><tr><td data-num="5"></td><td><pre>http_port 3128</pre></td></tr><tr><td data-num="6"></td><td><pre><span class="token comment"># 定义 squid 密码文件与 ncsa_auth 文件位置</span></pre></td></tr><tr><td data-num="7"></td><td><pre>auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/squid_user.txt</pre></td></tr><tr><td data-num="8"></td><td><pre><span class="token comment"># 认证进程的数量</span></pre></td></tr><tr><td data-num="9"></td><td><pre>auth_param basic children 15</pre></td></tr><tr><td data-num="10"></td><td><pre><span class="token comment"># 认证对话框显示提示信息</span></pre></td></tr><tr><td data-num="11"></td><td><pre>auth_param basic realm Squid proxy<span class="token punctuation">-</span>caching web server</pre></td></tr><tr><td data-num="12"></td><td><pre><span class="token comment"># 认证有效期</span></pre></td></tr><tr><td data-num="13"></td><td><pre>auth_param basic credentialsttl 24 hours</pre></td></tr><tr><td data-num="14"></td><td><pre><span class="token comment"># 是否区分用户名大小,off 为不区分</span></pre></td></tr><tr><td data-num="15"></td><td><pre>auth_param basic casesensitive off</pre></td></tr><tr><td data-num="16"></td><td><pre><span class="token comment"># 对定义的 squid_user 文件内的用户开启认证访问</span></pre></td></tr><tr><td data-num="17"></td><td><pre>acl 用户名 proxy_auth REQUIRED</pre></td></tr><tr><td data-num="18"></td><td><pre><span class="token comment"># 允许 squid_user 文件内用户进行代理</span></pre></td></tr><tr><td data-num="19"></td><td><pre>http_access allow 用户名</pre></td></tr><tr><td data-num="20"></td><td><pre><span class="token comment"># 顺序匹配,最后添加拒绝所有未允许的规则。不添加会发现,未匹配到的规则会被放行</span></pre></td></tr><tr><td data-num="21"></td><td><pre>http_access deny all</pre></td></tr><tr><td data-num="22"></td><td><pre><span class="token comment"># 缓存设置</span></pre></td></tr><tr><td data-num="23"></td><td><pre>cache_dir ufs /var/spool/squid 100 16 256 read<span class="token punctuation">-</span>only</pre></td></tr><tr><td data-num="24"></td><td><pre>cache_mem 0 MB</pre></td></tr><tr><td data-num="25"></td><td><pre>coredump_dir /var/spool/squid</pre></td></tr><tr><td data-num="26"></td><td><pre><span class="token comment"># 配置高匿,不允许设置任何多余头信息,保持原请求 header。</span></pre></td></tr><tr><td data-num="27"></td><td><pre>header_access Via deny all</pre></td></tr><tr><td data-num="28"></td><td><pre>header_access X<span class="token punctuation">-</span>Forwarded<span cLine truncated
|
||||
<p>至次已经可以通过填写安装 squid 的服务器 ip 加端口 3128 加用户名密码进行代理访问了(通过访问<span class="blue"><span class="exturl" data-url="aHR0cHM6Ly93d3cuaXAuY24v"> https://www.ip.cn/</span></span> 查看 ip 就会发现自己的出口 ip 已经变成了 squid 服务器的 ip 了)。但是要想科学上网还必须对代理的数据进行加密,否则访问外网还是会被我国的长城防火墙阻挡,所以还需要安装 stunnel 来实现此目的。</p>
|
||||
</div>
|
||||
<h6 id="stunnel服务端部分"><a class="anchor" href="#stunnel服务端部分">#</a> stunnel 服务端部分</h6>
|
||||
<h5 id="stunnel服务端部分"><a class="anchor" href="#stunnel服务端部分">#</a> stunnel 服务端部分</h5>
|
||||
<ul>
|
||||
<li>1、安装(和 squid 装在一起)</li>
|
||||
</ul>
|
||||
@@ -63,7 +63,7 @@
|
||||
<p>4、修改 stunnel 配置 (/etc/stunnle/stunnle.conf)</p>
|
||||
</li>
|
||||
</ul>
|
||||
<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>; 设置stunnel的pid文件路径</pre></td></tr><tr><td data-num="2"></td><td><pre>pid = /etc/stunnel/stunnel.pid</pre></td></tr><tr><td data-num="3"></td><td><pre>; 设置stunnel工作的用户(组)</pre></td></tr><tr><td data-num="4"></td><td><pre>setuid = root</pre></td></tr><tr><td data-num="5"></td><td><pre>setgid = root</pre></td></tr><tr><td data-num="6"></td><td><pre></pre></td></tr><tr><td data-num="7"></td><td><pre>; 开启日志等级:emerg (0)<span class="token punctuation">,</span> alert (1)<span class="token punctuation">,</span> crit (2)<span class="token punctuation">,</span> err (3)<span class="token punctuation">,</span> warning (4)<span class="token punctuation">,</span> notice (5)<span class="token punctuation">,</span> info (6)<span class="token punctuation">,</span> or debug (7)</pre></td></tr><tr><td data-num="8"></td><td><pre>debug = 7</pre></td></tr><tr><td data-num="9"></td><td><pre>; 日志文件路径</pre></td></tr><tr><td data-num="10"></td><td><pre>output = /etc/stunnel/stunnel.log</pre></td></tr><tr><td data-num="11"></td><td><pre></pre></td></tr><tr><td data-num="12"></td><td><pre>; 证书文件</pre></td></tr><tr><td data-num="13"></td><td><pre>cert = /etc/stunnel/stunnel.pem</pre></td></tr><tr><td data-num="14"></td><td><pre>; 私钥文件</pre></td></tr><tr><td data-num="15"></td><td><pre>key = /etc/stunnel/stunnel.pem</pre></td></tr><tr><td data-num="16"></td><td><pre></pre></td></tr><tr><td data-num="17"></td><td><pre>; 自定义服务名squid<span class="token punctuation">-</span>proxy</pre></td></tr><tr><td data-num="18"></td><td><pre><span class="token punctuation">[</span>squid<span class="token punctuation">-</span>proxy<span class="token punctuation">]</span></pre></td></tr><tr><td data-num="19"></td><td><pre>; 服务监听的端口,client要连接这个端口与server通信</pre></td></tr><tr><td data-num="20"></td><td><pre>accept = 1234(自定义)</pre></td></tr><tr><td data-num="21"></td><td><pre>; 服务要连接的端口,连接到squid的3128端口,将数据发给squid</pre></td></tr><tr><td data-num="22"></td><td><pre>connect = 3128</pre></td></tr></table></figure><h6 id="stunnel客户端部分"><a class="anchor" href="#stunnel客户端部分">#</a> stunnel 客户端部分</h6>
|
||||
<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>; 设置stunnel的pid文件路径</pre></td></tr><tr><td data-num="2"></td><td><pre>pid = /etc/stunnel/stunnel.pid</pre></td></tr><tr><td data-num="3"></td><td><pre>; 设置stunnel工作的用户(组)</pre></td></tr><tr><td data-num="4"></td><td><pre>setuid = root</pre></td></tr><tr><td data-num="5"></td><td><pre>setgid = root</pre></td></tr><tr><td data-num="6"></td><td><pre></pre></td></tr><tr><td data-num="7"></td><td><pre>; 开启日志等级:emerg (0)<span class="token punctuation">,</span> alert (1)<span class="token punctuation">,</span> crit (2)<span class="token punctuation">,</span> err (3)<span class="token punctuation">,</span> warning (4)<span class="token punctuation">,</span> notice (5)<span class="token punctuation">,</span> info (6)<span class="token punctuation">,</span> or debug (7)</pre></td></tr><tr><td data-num="8"></td><td><pre>debug = 7</pre></td></tr><tr><td data-num="9"></td><td><pre>; 日志文件路径</pre></td></tr><tr><td data-num="10"></td><td><pre>output = /etc/stunnel/stunnel.log</pre></td></tr><tr><td data-num="11"></td><td><pre></pre></td></tr><tr><td data-num="12"></td><td><pre>; 证书文件</pre></td></tr><tr><td data-num="13"></td><td><pre>cert = /etc/stunnel/stunnel.pem</pre></td></tr><tr><td data-num="14"></td><td><pre>; 私钥文件</pre></td></tr><tr><td data-num="15"></td><td><pre>key = /etc/stunnel/stunnel.pem</pre></td></tr><tr><td data-num="16"></td><td><pre></pre></td></tr><tr><td data-num="17"></td><td><pre>; 自定义服务名squid<span class="token punctuation">-</span>proxy</pre></td></tr><tr><td data-num="18"></td><td><pre><span class="token punctuation">[</span>squid<span class="token punctuation">-</span>proxy<span class="token punctuation">]</span></pre></td></tr><tr><td data-num="19"></td><td><pre>; 服务监听的端口,client要连接这个端口与server通信</pre></td></tr><tr><td data-num="20"></td><td><pre>accept = 1234(自定义)</pre></td></tr><tr><td data-num="21"></td><td><pre>; 服务要连接的端口,连接到squid的3128端口,将数据发给squid</pre></td></tr><tr><td data-num="22"></td><td><pre>connect = 3128</pre></td></tr></table></figure><h5 id="stunnel客户端部分"><a class="anchor" href="#stunnel客户端部分">#</a> stunnel 客户端部分</h5>
|
||||
<div class="note info">
|
||||
<p>可以安装在要代理的机器上,在需要代理的情况下再开启(代理地址填 127.0.0.1 加客户端监听端口)。也可以安装在国内的服务器上一直保持连接(代理信息填国内服务器 ip 加客户端监听端口)。本示例客户端为 windows 系统</p>
|
||||
</div>
|
||||
@@ -88,7 +88,7 @@
|
||||
<category term="Windows " scheme="https://hitoli.com/categories/Windows/" />
|
||||
<category term="Windows 11" scheme="https://hitoli.com/tags/Windows-11/" />
|
||||
<pubDate>Sat, 09 Sep 2023 16:38:00 +0800</pubDate>
|
||||
<description><![CDATA[ <h6 id="恢复方法"><a class="anchor" href="#恢复方法">#</a> 恢复方法</h6>
|
||||
<description><![CDATA[ <h4 id="恢复方法"><a class="anchor" href="#恢复方法">#</a> 恢复方法</h4>
|
||||
<p>1、按【Win+X】</p>
|
||||
<p>2、选择【终端管理员】</p>
|
||||
<p>3、输入以下命令并回车:<br />
|
||||
@@ -588,8 +588,8 @@ Lombok supports: OpenJDK javac, ECJ</p>
|
||||
<category term="服务" scheme="https://hitoli.com/categories/Linux/%E6%9C%8D%E5%8A%A1/" />
|
||||
<category term="Nginx" scheme="https://hitoli.com/categories/Linux/%E6%9C%8D%E5%8A%A1/Nginx/" />
|
||||
<category term="Nginx" scheme="https://hitoli.com/tags/Nginx/" />
|
||||
<category term="动态域名解析" scheme="https://hitoli.com/tags/%E5%8A%A8%E6%80%81%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90/" />
|
||||
<category term="Tengine" scheme="https://hitoli.com/tags/Tengine/" />
|
||||
<category term="动态域名解析" scheme="https://hitoli.com/tags/%E5%8A%A8%E6%80%81%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90/" />
|
||||
<pubDate>Wed, 30 Nov 2022 16:35:00 +0800</pubDate>
|
||||
<description><![CDATA[ <h4 id="应用场景"><a class="anchor" href="#应用场景">#</a> 应用场景:</h4>
|
||||
<p>由于有时候 nginx 代理的时候,第三方域名对应的 ip 可能发生变化,然而没有提前通知,然而如果不配置什么,nginx 又不能智能解析,因此 nginx 动态解析域名就比较重要。</p>
|
||||
@@ -622,8 +622,8 @@ Lombok supports: OpenJDK javac, ECJ</p>
|
||||
<category term="服务" scheme="https://hitoli.com/categories/Linux/%E6%9C%8D%E5%8A%A1/" />
|
||||
<category term="Nginx" scheme="https://hitoli.com/categories/Linux/%E6%9C%8D%E5%8A%A1/Nginx/" />
|
||||
<category term="Nginx" scheme="https://hitoli.com/tags/Nginx/" />
|
||||
<category term="Tengine" scheme="https://hitoli.com/tags/Tengine/" />
|
||||
<category term="stream" scheme="https://hitoli.com/tags/stream/" />
|
||||
<category term="Tengine" scheme="https://hitoli.com/tags/Tengine/" />
|
||||
<pubDate>Wed, 30 Nov 2022 16:09:00 +0800</pubDate>
|
||||
<description><![CDATA[ <h4 id="引言"><a class="anchor" href="#引言">#</a> 引言</h4>
|
||||
<p>stream 模块一般用于 TCP/UDP 数据流的代理和负载均衡,可以通过 stream 模块代理转发 TCP 消息。我是用来转发 mysql、gitee 等连接的,有天 ip 发生了变动导致连接不上。前期试过配置<span class="blue"> resolver 114.114.114.114 valid=60s;</span> 来动态解析域名,结果 stream 模块不支持 set 函数,这就导致 ip 变动后必须手动重启或者 reload 一下 nginx 才能正常连接。后面经过搜索发现有人说用 Tengine 替代 nginx 可以实现就试了试,结果发现<span class="red"> Tengine 只能实现 http 下的动态域名解析</span>,至此问题依旧。没办法,我只能通过定时任务加脚本判断 ip 是否变动,如果变动就 reload 一下 nginx。</p>
|
||||
|
||||
Reference in new issue
Block a user