优化 Lightsail 的 IPv4 成本:使用 Squid 构建 Lightsail 正向代理

Olawale Olaleye
难度
100 - 初级
时间
10 分钟
前提条件

海外区域: 注册 / 登录 亚马逊云科技

相关产品
受众

运维人员;开发人员

上次更新时间
2024 年 9 月 6 日
所需费用
  • 以亚太地区(东京)区域为例,如果您将方案部署在该区域,且您按照教程中的步骤操作并在教程结束的 1 小时内终止相应资源,所需费用将不超过 3USD。
  • 亚马逊云科技免费套餐配额

背景

随着 IPv4 地址的日益稀缺,AWS 开始对 IPv4 地址进行收费,我们建议用户采取 IPv6 来进行架构优化,但对于某些场景比如:某些应用程序或服务不支持 IPv6,在 lightsail 出站访问其时如果没有 IPv4,则会造成访问问题。所以对于这些出站访问场景,为了兼容性,无法完全弃用 IPv4,导致需要额外支付 IPv4 地址费用。本文将介绍一种使用 Squid 代理来解决此问题的方案,帮助您在不放弃 IPv4 的情况下,有效降低 Lightsail 集群采用 IPv4 的数量,以便达到成本节省。

实现方式

第一步:在 Lightsail 中创建 Squid 实例

1. 创建 Lightsail

进入 Lightsail 控制台,点击“创建实例

选择“Linux/Unix” 平台,“仅限操作系统(OS)” → “Ubuntu

在“可选启动脚本中”填入以下内容,以在启动实例时完成 Squid 的配置。之后,在选择“双堆栈”网络类型以及合适的实例类型,实例类型的选择请根据您实际业务负载选择合适的尺寸,在这里我选择“$5 美元/月(前 90 天免费)”,之后点击“创建实例

sudo apt update
sudo apt install squid -y
sed -i 's/http_access deny all/http_access allow all/g' /etc/squid/squid.conf
sudo systemctl restart squid

2. 配置安全组。

进入刚刚创建好的实例的详细页面内,选择“联网”,在“IPv4 防火墙”增加允许“3128”端口的进站请求。

提示:在安全组配置中,您也可以选择“限制 IP 地址”以提升安全性,只允许其他需要进行代理的 lightsail 实例 IP。

第二步:配置其他没有 IPv4 Lightsail 集群实例,以应用 Squid 代理出站。

Linux:

编辑系统代理设置,设置代理为之前 Squid 服务器的 IP 和端口号。以 Ubuntu 为例:

1. 使用文本编辑器(如 nano)编辑/etc/environment 文件:

sudo nano /etc/environment

2. 在文件末尾添加以下两行,替换 "<私有 ip>:3128" 为刚刚在“第一步”中创建好的 Squid 代理服务器私有 IP 和端口,私有 IP 可以在 Lightsail 控制台中查看:以私有 ip 为 192.168.1.100 举例

http_proxy="http://192.168.1.100:3128/"

3. 保存并退出文件

4. 使环境变量生效:

source /etc/environment

5. 验证环境变量是否生效:

echo $http_proxy

如果输出了你配置的代理地址,说明配置成功。

6.(可选)如果只是临时使用代理,也可以在终端中直接导出环境变量:以私有 ip 为 192.168.1.100 举例:注:但这种方式只对当前终端有效,重启后会失效。

export http_proxy=http://192.168.1.100:3128

通过上述步骤,你已经为系统设置了全局的 HTTP/HTTPS 代理,所有需要访问网络的应用程序都会通过配置的 Squid 代理服务器进行网络通信。对于某些特定的应用程序,你也可以单独为它们设置代理,而不影响其他应用的网络访问。

Windows:

  1. 打开 "Control Panel" 搜索选择 "Internet Option",选择“Connections”→“LAN settings
  2. 勾选 "Use a Proxy Server for your LAN" 选项框。
  3. 在 "Address" 和 "端 Port" 字段中,分别输入 Squid 代理服务器的 IP 地址和端口号。例如,如果 Squid 服务器的 IP 地址为 192.168.1.100,端口号为 3128,则输入:http://192.168.1.100:3128
  4. 单击 "OK" 保存设置。

通过在 Linux 和 Windows 上配置 Squid 代理,您可以让没有公网 IPv4 地址的 Lightsail 实例通过代理服务器访问互联网,从而降低对公网 IPv4 地址的需求,节省成本。

第三步(可选):优化

除了基本的代理功能外,Squid 还提供了一些可选的优化和安全增强措施,以满足不同场景的需求。

添加 Squid ACL(可选)

访问控制列表 (ACL) 提供了一种限制哪些 IP 地址可以连接到互联网的方式。可以使用以下命令为 Squid 创建 ACL:

在 squid.conf 文件中添加以下行以允许单个 IP 地址访问:

acl permittedips src [ip地址]

例如,要允许本地 IP 地址例如 192.168.0.15,请输入:

acl permittedips src 192.168.0.15

注意:在大型 ACL 中,最好为每个条目添加注释,以跟踪允许的系统。要添加注释,请使用(#)符号:

acl permittedips src 192.168.0.15 # [注释]

使用以下语法指定一个IP地址范围:

acl permittedips src [起始IP地址]-[结束IP地址]

通过添加 Safe_ports 指令打开特定端口:

acl Safe_ports port [端口号]

在 Squid 上阻止网站(可选)

Squid 可以防止用户访问某些网站,这对于管理员控制管理很有帮助。以下是配置 Squid 阻止网站的步骤:

1. 在 /etc/squid 目录中创建一个新的文本文件 blocked.acl:

sudo nano /etc/squid/blocked.acl

2. 添加你要阻止的网站,每个条目前面加一个点。这个点告诉 Squid 阻止主网站的所有子域名。例如:

.facebook.com
.instagram.com

列出网站后,保存文件并退出。

3. 打开 squid.conf 文件:

sudo nano /etc/squid/squid.conf

4. 在 ACL 列表上方添加以下行:

acl blocked_websites dstdomain "/etc/squid/blocked.acl" 
http_access deny blocked_websites

5. 保存文件并退出,然后重启 Squid。

通过这些可选的优化和安全增强措施,您可以根据具体需求对 Squid 进行定制,以获得更好的性能和安全性。

清理资源

当不再需要使用 Squid 代理时,在Lightsail 控制台中删除该实例,释放资源。

总结

通过使用 Squid 代理,我们可以有效地将没有 IPv4 的 Lightsail 集群的出站请求转发到具备 IPv4 地址的这台代理机上,从而减少对 IPv4 地址的需求,降低 Lightsail 的成本。这种方法简单易行,能够满足大多数场景的需求。

更多教程

快速搭建容量高达 35GB 的免费个人网盘

本教程将介绍如何搭建一个没有使用限制的免费私人网盘。

构建企业专属智能客服机器人

本文将演示如何结合多种服务,打造企业专属的智能客服。

使用生成式 AI 构建多语言问答知识库

使用多种服务,构建可汇总搜索结果的多语言知识库。

查看全部教程 >>

免费套餐

AWS 海外区域

拓展海外业务或个人体验
免费使用 100 余种云产品或服务, 长达 12 个月

AWS 中国区域

发展中国业务
免费使用 40 余种核心云服务产品,长达 12 个月