内网服务器访问外网

技术文档网 2021-06-08

前提条件

目前有一台内网服务器A(内网10.10.100.114),一台能访问外网的台式机B(172.17.9.56),两台电脑都是Ubuntu 18.04系统。现在A服务器是无法访问外网的,需要使用代理的方法让A通过有外网的B访问外网。

# 以下参数根据自己机器确定
服务器A 内网 10.10.100.114 用户名root
PC B 外网 172.17.9.56 用户名ethtest
预设置的代理端口号为:55661

一、配置A的代理

该步骤比较简单,直接配置环境变量即可。可以在/etc/profile下配置,这边采用在/etc/profile.d文件夹下配置环境变量。

1.1 新建代理文件

cd /etc/profile.d/
vi proxy.sh

1.2 在proxy.sh里面添加以下内容:

#IP是要连接的代理主机B,端口是进行代理的端口。下列环境变量代表A通过172.17.9.56的端口55661进行代理,访问外网
export http_proxy=http://172.17.9.56:55661

#如果要设置https代理,应该添加如下配置,暂未尝试过
export https_proxy=http://172.17.9.56:55661

#设置不代理的IP或者网址,如下配置,这些请求不会被代理,不支持模糊匹配
export no_proxy="127.0.0.1, localhost, 10.10.100.114, 172.17.9.56"

1.3 然后source /etc/profile,再使用指令echo $http_proxy,如果能打印出相关代理信息说明操作成功。

$echo $http_proxy
http://172.17.9.56:55661

二、在台式机B上安装代理程序

此方式持久有效

2.1 安装配置squid

#安装squid
sudo apt install -y squid

#cd到配置文件目录下
cd /etc/squid/

#备份原始配置文件
cp squid.conf squid.conf_bak

#修改配置文件
vi squid.conf

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

# 将http_access deny all注释掉,并修改为http_access allow all, 如下:
#http_access deny all
http_access allow all

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

2.2 启动

#停掉服务
sudo service squid stop

#检查语法是否错误
sudo squid -k parse

#初始化缓存空间
sudo squid -z

#启动squid
sudo service squid start


#检查端口是否开启成功
netstat -an | grep 55661

2.3 测试

使用wget baidu.comcurl www.baidu.com 测试内网服务器能否访问外网

wget baidu.com

本方式参考CSDN博客

三、git代理设置

命令行设置

git config --global http.proxy http://172.17.9.56:55661
git config --global https.proxy http://172.17.9.56:55661

四、docker代理设置

不为docker设置的代理的话,运行时往往会提示解析失败,比如:

错误1:
在写Dockerfile时遇到returned a non-zero code: 100,报这个错误是因为在install之前没有update

错误2:
Err:1 http://security.ubuntu.com/ubuntu xenial-security InRelease
  Temporary failure resolving 'security.ubuntu.com'
Err:2 http://archive.ubuntu.com/ubuntu xenial InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Err:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Err:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease
  Temporary failure resolving 'archive.ubuntu.com'

本方式要根据docker的版本号设置,这点比较坑,参考CSDN博客

本文实验环境,docker版本为19.03.6,所以创建~/.docker/config.json,并配置如下:

{
  "proxies":
  {
    "default":
    {
      "httpProxy": "http://172.17.9.56:55661",
      "httpsProxy": "http://172.17.9.56:55661",
      "noProxy": "*.test.example.com,.example2.com"
    }
  }
}

五、(可选) 反向代理方式

此方式单次有效,也可使内网通过代理访问外网

1 在机器B中打开终端T1,输入ssh root@10.10.100.114,连接机器A

2 然后继续在终端T1中,输入ssh -D 55661 ethtest@172.17.9.56,连接机器B

3 然后在机器B中打开终端T2,输入export {http,https}_proxy='socks5h://127.0.0.1:55661'

六、其他Tips

设置ipv4转发

KVM的Ubuntu 18.04重启网络服务,需要执行service network-manager restart,别的方式会提示

$ systemctl restart network
Failed to restart network.service: Unit network.service not found.

相关文章

  1. supervisor使用教程

    一、安装 1:easy_install 安装: easy_install supervisor 2:pip 安装: pip install supervisor 3:Debian / Ubuntu

  2. gitlab的ssh key不生效的问题

    在用 gitlab 的管理代码时发现一个问题:如果用 http 协议,每次 push 的时候都需要输入用户名和密码,如果 用 ssh 协议,先要生成公钥: ssh-keygen -t rsa -C

  3. UOJ安装指南

    这是一个UOJ的docker版本。在安装之前,请确认Docker已经安装在您的操作系统中。这个docker的映像是64位的版本,在32位的系统上安装可能会出现错误。 安装 请先下载 JDK7u76

  4. untu14.04下创建用户并赋予执行sudo命令的权限

    untu14.04下创建用户并赋予执行sudo命令的权限 创建用户:adduser +用户名(该命令在home下生成用户目录并创建用户) 1. 切换到root用户下 2. /etc/sud

  5. 如何查看当前apache的工作模式prefork worker还是event模式?

    查看apache工作模式 $ apachectl -V (注:apachectl可理解为apache control,其实是一段bash脚本) Server version: Apache/2.4.

随机推荐

  1. supervisor使用教程

    一、安装 1:easy_install 安装: easy_install supervisor 2:pip 安装: pip install supervisor 3:Debian / Ubuntu

  2. gitlab的ssh key不生效的问题

    在用 gitlab 的管理代码时发现一个问题:如果用 http 协议,每次 push 的时候都需要输入用户名和密码,如果 用 ssh 协议,先要生成公钥: ssh-keygen -t rsa -C

  3. UOJ安装指南

    这是一个UOJ的docker版本。在安装之前,请确认Docker已经安装在您的操作系统中。这个docker的映像是64位的版本,在32位的系统上安装可能会出现错误。 安装 请先下载 JDK7u76

  4. untu14.04下创建用户并赋予执行sudo命令的权限

    untu14.04下创建用户并赋予执行sudo命令的权限 创建用户:adduser +用户名(该命令在home下生成用户目录并创建用户) 1. 切换到root用户下 2. /etc/sud

  5. 如何查看当前apache的工作模式prefork worker还是event模式?

    查看apache工作模式 $ apachectl -V (注:apachectl可理解为apache control,其实是一段bash脚本) Server version: Apache/2.4.