Linux-Squid服务让一台处于仅主机模式的内网客户端能够顺利的访问外网

这篇博客旨在如何让一台处于仅主机模式的虚拟机能够访问外网!!!
众所周知,网络连接有三种模式:桥接、NAT、仅主机,而桥接模式和NAT模式都可以借助物理机联通外网,但仅主机模式不行,仅主机模式只可以在局域网内部进行通信。
划重点:想要让仅主机模式的虚拟机上网,可以借助squid代理缓存服务

1、Squid是Linux系统中最为流行的一款高性能代理服务软件,通常用作Web网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存。【先请求再应答】

2、Squid服务程序会按照收到的用户请求向网站源服务器请求页面、图片等所需的数据,并将服务器返回的数据存储在运行Squid服务程序的服务器上。当有用户再请求相同的数据时,则可以直接将存储服务器本地的数据交付给用户,这样可以减少了用户的等待时间。

3、Squid服务程序具有配置简单、效率高、功能丰富等特点,它能支持HTTP、FTP、SSL等多种协议的数据缓存,可以基于访问控制列表(ACL)和访问权限列表(ARL)执行内容过滤与权限管理功能,还可以基于多种条件禁止用户访问存在威胁或不适宜的网站资源,因此可以保护企业内网的安全,提升用户的网络体验,帮助节省网络带宽。,还缓解了网站服务器的负载压力。【一次请求,一次应答,再次请求,再无应答】

4、由于缓存代理服务不但会消耗服务器较多的CPU计算性能、内存以及硬盘等硬件资源,同时还需要较大的网络带宽来保障数据的传输效率,由此会造成较大的网络带宽开销。因此国内很多IDC或CDN服务提供商会将缓存代理节点服务器放置在二三线城市以降低运营成本。

5、 正向代理模式:是指让用户通过Squid服务程序获取网站页面等资源,以及基于访问控制列表(ACL)功能对用户访问网站行为进行限制。【标准代理模式+透明代理模式】
正向代理模式一般用于企业局域网之中,让企业用户统一地通过Squid服务访问互联网资源,这样不仅可以在一定程度上减少公网带宽的开销,而且还能对用户访问的网站内容进行监管限制,一旦内网用户访问的网站内容与禁止规则相匹配,就会自动屏蔽网站。【先用再存】

6、反向代理模式:一般是为大中型网站提供缓存服务的,它把网站中的静态资源保存在国内多个节点机房中,当有用户发起静态资源的访问请求时,可以就近为用户分配节点并传输资源,因此在大中型网站中得到了普遍应用。【先存再用】
反向代理模式一般使用多台节点主机反向缓存网站数据,从而加快用户访问速度。因为一般来讲,网站中会普遍加载大量的文字、图片等静态资源,而且它们相对来说都是比较稳定的数据信息,当用户发起网站页面中这些静态资源的访问请求时,我们可以使用Squid服务程序提供的反向代理模式来进行响应。而且,如果反向代理服务器中恰巧已经有了用户要访问的静态资源,则直接将缓存的这些静态资源发送给用户,这不仅可以加快用户的网站访问速度,还在一定程度上降低了网站服务器的负载压力。

为了更好的理解代理缓存服务,必须得细细品读上述内容。

1. 部署实验环境

双网卡配置
主机配置
squid服务器:192.168.10.10

Squid客户端:192.168.10.20
在这里插入图片描述
上述主机均设置为host only模式
squid服务器双网卡配置【既能访问外网,又能访问内网】
外网网卡:桥接dhcp模式
内网网卡:host only模式,IP地址:192.168.10.10
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#服务端网卡配置文件
[root@linuxfwd network-scripts]# cat ifcfg-eno16777728 
HWADDR=00:0C:29:50:48:2E
TYPE=Ethernet
BOOTPROTO=none
NAME=eno16777728
IPADDR=192.168.10.10
PREFIX=24
UUID=a42737cf-ba2b-4dcc-9b61-d835e9afff46
ONBOOT=yes
[root@linuxfwd network-scripts]# cat ifcfg-eno33554968 
HWADDR=00:0c:29:50:48:38
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=eno33554968
UUID=227eb5d6-92da-4329-b5dc-e260ede785a6
ONBOOT=yes
#客户端网卡配置文件
[root@linuxkhd network-scripts]# cat ifcfg-eno16777728 
HWADDR=00:0C:29:4F:3A:8A
TYPE=Ethernet
NAME=eno16777728
IPADDR=192.168.10.20
PREFIX=24
UUID=e8d8cd0d-e264-4941-9a93-c0bb25a959d5
ONBOOT=yes

测试网络连通性
服务器能与外网和内网通信
在这里插入图片描述
客户端可以与服务器通信
在这里插入图片描述
外网可以与服务器通信
在这里插入图片描述

2. 配置网络常见问题解决方案

如果在配置双网卡时遇到问题, 可使用以下方法排查网络:
①检查两张网卡的配置文件是否书写错误【两张网卡】,看是否使用了正确的网卡文件,最好把不相关的网卡配置文件删除,仅保留要使用的网卡配置文件。
②重启网络服务【systemctl restart network
③查看物理机的VMnet1的IP地址与服务器的其中一张网卡是否处于同一网段,并且网络模式是否是dhcp【自动获取】【ifocnfig】
④查看客户端的IP地址是否与服务器的另一张网卡处于同一网段,并且网络模式都处于host only模式【固定分配】【ifconfig】

⑤防火墙一般不用关闭也可以的,如果上述方法都不行,也可以尝试关闭防火墙试试。
⑥重启虚拟机,虚拟机有时候得重启才听话!!!

在配置好上述网络环境后,别忘了给虚拟机拍个快照,如果你想每次都配置一遍也无所谓。

3. 部署squid缓存代理服务

yum -y install squid
在这里插入图片描述
重启squid服务并添加到开机自启项中
在这里插入图片描述
主配置文件:/etc/squid/squid.conf
在这里插入图片描述
在这里插入图片描述

4. 正向代理服务【先用再存】

在这里插入图片描述

4.1 标准正向代理服务

客户端不能上外网
在这里插入图片描述

方法1:所有浏览器都可以使用标准正向代理服务器上网

标准正向代理服务器地址:192.168.10.10,默认squid服务占用的端口号:3128
在这里插入图片描述
如果想使用其他端口号,可以修改squid服务的主配置文件,如下:
在这里插入图片描述
还需要设置squid服务的selinux安全策略的允许端口:
在这里插入图片描述
清空服务器的iptables策略并保存当前的iptablse策略
在这里插入图片描述
可以看到仅主机模式下的虚拟机也可以上网了!!!
在这里插入图片描述

方法2:指定某一个浏览器才可以使用标准正向代理服务器上网

法1是利用了浏览器默认配置的代理缓存服务器是使用系统的代理服务器
首先取消系统的代理缓存服务器配置
在这里插入图片描述
打开firefox,配置浏览器独有的代理缓存服务器参数【网上很多博客都没有说linux系统下的firefox在哪里配置代理服务器!!!】:
在这里插入图片描述
在这里插入图片描述
清空服务器的iptables策略并保存当前的iptablse策略
在这里插入图片描述
可以看到,处于仅主机模式下的虚拟机也可以上网了!!!
在这里插入图片描述

4.1 透明正向代理服务

标准正向代理服务下,如果内网中有100台客户端,那就需要对这100台主机进行代理服务的设置,这样很不方便。而透明正向代理服务,无需用户自行在浏览器上进行设置,由DHCP服务器将网络配置信息分配给客户端主机。这样只要用户打开浏览器便会自动使用透明正向代理服务。
SNAT技术完成数据的转发,让客户端主机将数据交给Squid代理服务器,再由后者转发到外网中。简单来说,就是让Squid服务器作为一个中间人,实现内网客户端主机与外部网络之间的数据传输。
配置客户端网络环境,可以看到内网客户端是不能解析www.baidu.com
在这里插入图片描述

[root@linuxkhd network-scripts]# cat ifcfg-eno16777728 
TYPE=Ethernet
NAME=eno16777728
UUID=e8d8cd0d-e264-4941-9a93-c0bb25a959d5
ONBOOT=yes
HWADDR=00:0C:29:4F:3A:8A
BOOTPROTO=none
IPADDR0=192.168.10.20
PREFIX0=24
GATEWAY0=192.168.10.10
DNS1=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no

在这里插入图片描述
②配置服务器,使得桥接网卡支持SNAT端口转发功能

iptables -F  #清空防火墙策略
service iptables save
iptables -t nat  -A POSTROUTING -p udp --dport 53 -o eno33554968 -j MASQUERADE   
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf    #允许squid服务转发ipv4数据包
sysctl -p   #/etc/sysctl.conf里面的转发参数立即生效

③测试客户端是否能ping外网,可以发现,能够解析该域名了,但是无法ping通
在这里插入图片描述
④配置squid服务的主配置文件/etc/squid/squid.conf在这里插入图片描述

如果遇到报错,请配置/etc/hosts文件
squid -k parse 【检查主配置文件是否有错误】
squid -z 【初始化squid服务程序的透明代理缓存技术】

重启squid服务 systemctl restart squid
⑤继续配置服务器的SNAT端口转发,使得客户端对网站的80端口的请求转发到3128端口上。
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eno33554968 -j SNAT --to 192.168.124.18
service iptables save
⑥可以看到,处于仅主机模式的客户端已经可以上网了
在这里插入图片描述
在这里插入图片描述

#解读SNAT和iptables防火墙:
#SNAT技术使得多个内网的用户通过同一个外网IP接入Internet
#将访问网卡eno33554968的53号端口(DNS服务)的请求,进行伪装。
iptables -t nat  -A POSTROUTING -p udp --dport 53 -o eno33554968 -j MASQUERADE

#将访问服务器的80端口的请求,转发到服务器的3128。
iptables -t nat -A PREROUTING  -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

#将来自192.168.10.0/24网段的请求,转发到网卡eno33554968的IP地址192.168.124.18
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eno33554968 -j SNAT --to 192.168.124.18

如果觉得使用iptables配置防火墙很麻烦,可以使用firewall-config进行配置,打上✔就行了。
在这里插入图片描述

5. 反向代理服务【先存再用】

在这里插入图片描述

  1. 网站页面是由静态资源和动态资源一起组成的【静态资源(较稳定):网站架构CSS文件、图片、视频等数据】【动态资源(容易发生变化)】
  2. 如果能够把这些静态资源从网站页面中抽离出去,然后在全国各地部署静态资源的缓存节点,这样不仅可以提升用户访问网站的速度,而且网站源服务器也会因为这些缓存节点的存在而降低负载。
  3. 反向代理是Squid服务程序的一种重要模式,其原理是把一部分原本向网站源服务器发起的用户请求交给Squid服务器缓存节点来处理。
  4. 当前许多网站都默认禁止了反向代理功能。开启了CDN(内容分发网络)服务的网站也可以避免这种窃取行为。

①配置squid服务的主配置文件:

59 http_port 桥接网卡IP地址:80 vhost
60 cache_peer 网站源服务器IP地址 parent 80 0 originserver

②重启squid服务【systemctl restart squid
作用:当输入本地桥接网卡的IP地址,会进入到网站源服务器所对应的网站中!!!【偷流量的事情还是少做为妙,建议用自己的网站做测试!!!作为小白,还没有自己的网站或者有域名的博客,这里就不多介绍了!!!】
可以百度一下,都是介绍如何禁止被反代的!!!
在这里插入图片描述
现在我们可以舒舒服服的使用仅主机模式的虚拟机上网啦!!!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐