使用squid 解决内网服务器通过设置代理访问外网

背景

线上算法服务有一个偶尔触发的逻辑需要访问三方的api,由于生产服务器无法访问外网,因此一直使用代理进行外网访问,最近代理服务器被重装了,由于该代理是前同事装的,导致这台服务器重装时候没有通知相应的人员进行对应的配置保留,进而影响了线上服务。后面需要线上问题修复,问题就推到我这里了。

问题

上述问题解决办法比较清楚,就是在那台重装的服务器上恢复代理(重装代理)。这里以A表示线上服务器(当然不止一台线上服务器, 假设就一台), B表示这台代理服务器,其中A服务器不能直接访问外网,而B能够直接访问外网。假设

A服务器相关配置如下:

  • 内网IP 172.20.100.202
  • 系统ubuntu 16.04

B服务器相关配置如下

  • 内网IP 172.20.100.201
  • 系统Ubuntu 16.04

现在问题是A服务器是无法访问外网的,需要使用代理的方法让A通过有外网的B访问外网。

网络设置代理的软件有多种,比如tinyproxysquid等。这里以squid为解决方案。

解决方案——Squid

由于涉及两个服务器之间的设置,因此整个操作可以分为两个部分:

  • 在服务器A上配置代理
  • 在服务器B上安装代理程序
在服务器A上配置代理

该步骤比较简单,直接配置环境变量即可。可以在~/.bash_profile下配置, 在其中添加两行内容:

alias proxy='export http_proxy=http://172.20.100.201:8898;export https_proxy=http://172.20.100.201:8898'
alias unproxy='unset http_proxy https_proxy'

# IP为要连接的代理服务器B,端口是要代理的端口,如下的意思该服务器要通过172.20.100.201服务器的端口8898的代理来访问外网

然后source ~/.bash_profile,再使用指令

# proxy
# echo $http_proxy,如果能打印出相关代理信息说明操作成功

[root] proxy
[root] echo $http_proxy
http://172.20.100.201:8898

在服务器B上安装代理程序

服务器B是可以访问外网的,这里安装squid,这里采用apt-get的安装方式,没有权限的话加sudo

[root] sudo apt-get install squid
#cd到配置文件目录下
[root] cd /etc/squid/
#备份原始配置文件
[root] sudo cp squid.conf squid.conf_bak
#修改配置文件
[root] sudo vim squid.conf

squid.conf配置文件修改内容如下

# 修改端口为代理的端口
http_port 8898


# 加入A服务器的ip,可以有多个
acl computeA1 src 172.20.100.202
acl computeA2 src 172.20.100.203


# 设置http_access能够访问上述服务器
http_access allow computeA1
http_access allow computeA2

# 将http_access deny all注释修改为http_access allow all
# http_access deny all
http_access allow all

  • 启动
# 检查语法是否错误[root] 
squid -k parse
# 初始化缓存空间[root] 
squid -z
[root]Set Current Directory to /var/spool/squid
| Creating missing swap directories
| No cache_dir stores are configured.
# 启动 squid
[root] service squid start
Redirecting to /bin/systemctl start squid.service
#检查端口是否开启成功[root@ali1 squid]# netstat -an | grep 8898
tcp1       0      0 :::8898               :::*                    LISTEN

注意
如果启动不成功或者检测有问题,可能是cache或者一些存储路径的权限问题,可以先将这些相应的文件夹的权限设置成777
sudo chmod 777 /var/spool/squid

  • 测试
    使用wget baidu.comcurl www.baidu.com

在A服务器上操作:

  • ping一下,看是否能通: ping 172.20.100.201
  • 之后使用telnet测一下端口号: telnet 172.20.100.201 8898
  • 最后测试内网服务器能否访问外网: wget baidu.com
[root] wget baidu.com
--xxxx--  http://baidu.com/
Connecting to 172.20.100.201 8898... connected.
Proxy request sent, awaiting response... 200 OK
Length: 81 [text/html]
Saving to: ‘index.html.1’
100%[=================================================================================================================================>] 81          --.-K/s   in 0s      
  (20.7 MB/s) - ‘index.html.1’ saved [81/81]

参考

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值