如何用代理服务器上外网(局域网服务器访问外网方案)

在阿里云、腾讯云等云平台购买多台服务器时,出于成本考虑,不会为每台服务器配置公有IP。这就带来了一个问题,没有公网IP的服务器无法访问外网。本文介绍了一种未绑定公网IP的服务器访问外网的可选方案,前提是购买的服务器中至少有一台绑定了公网IP。

这里先介绍一下基本原理和步骤。对网络比较了解的朋友可能一眼就知道是怎么回事了。然后后面详细介绍具体操作流程。

基本原理

使用与公共IP绑定的服务器作为代理转发网络。

基本步骤

假设有两台服务器:

  • 主服务器与公共IP绑定,可以访问外部网络。
  • 未绑定公共IP的服务器worker1无法访问外部网络。
  • 操作步骤如下:

  • 建立从worker1到master的隧道
  • 修改worker1的路由表,使用master作为路由。
  • 在主服务器上,使用iptables根据worker1的请求进行SNAT转换。
  • 详细介绍

    本文以云平台购买的两个节点实例为例:

  • 主节点:内部网IP 192.168.0.197
  • 工作节点:内部网IP 192.168.0.196
  • 主节点与公网IP绑定,可以访问外网,工作节点没有与公网IP绑定,不能访问外网。

    用ip route show命令查看两台主机的路由表,有如下记录:

    默认通过192.168.0.253 dev eth0

    也就是说,两台主机都默认使用192.168.0.253作为路由转发请求,因此我们可以大致猜测网络拓扑如下:

    如何用代理服务器



    当然,真实的网络拓扑会更复杂,所以这里我们只对购买的两台主机做一个简化。

    我们现在要做的是,worker1节点可以通过主节点作为代理访问外网。

    第一步:建立 master 节点到 worker1 节点的隧道

    因为两台机器在一个内网,可以互相通信,所以我们可以通过默认网卡在两台主机之间建立隧道。



    在主节点上执行以下命令

    #创建一个IPIP类型的虚拟网卡 # IP tun add[虚拟网卡名称]mode ipip remote[peer IP address]local[local IP address] IP tunnel add worker 1 _ tunnel mode IP remote 192 . 168 . 0 . 196 local 192 . 168 . 0 . 197 #启动刚刚创建的虚拟网卡 IP link set worker 1 _ tunnel up 绑定IP地址 peer[对端要绑定的IP地址]dev[本地要绑定的虚拟网卡名称] IP add add 192 . 168 . 3 . 100 peer 192 . 168 . 3 . 101 dev worker 1 _



    可以看到网卡绑定了IP: 192.168.3.100。

    类似地,在worker1节点上执行以下命令

    ip隧道添加master_tunl模式ipip remote 192 . 168 . 0 . 197 local 192 . 168 . 0 . 196 IP link set master _ tunl up ipadd 192 . 168 . 3 . 101 Peer 192 . 168 . 3 . 100 dev master _ TUNL执行ip addr show命令,看到worker1节点有以下网卡:



    可以看到网卡绑定了IP: 192.168.3.101。

    现在让我们验证隧道是否已经成功建立,并且在主节点上执行ping 192.168.3.101。



    类似地,在worker1节点执行ping 192.168.3.100。



    可以看出,两台主机已经可以通过设置的IP相互访问,从而两台主机之间的隧道成功建立。

    第二步:在 worker1 节点修改路由表,让 master 节点作为 worker1 节点默认路由的网关

    我们可以首先执行ip route show来检查当前的默认路由。



    此路由显示,worker1节点上的默认路由使用192.168.0.253作为默认网关。

    首先,执行ip route del default删除默认网关。

    然后,通过192.168.3.100 Devmaster _ TUNL设置执行IP路由添加默认,以使用主节点作为默认网关。注意,创建的master_tunl虚拟网卡在这里被用作网络设备。

    第三步:在 master 节点通过 iptables 工具,对通过我们创建的隧道过来的请求进行 SNAT 转换

    因为来自worker1的请求的源地址是内部网络地址192.168.3.101,所以来自外部网络的请求在没有nat转换的情况下无法到达worker1节点。

    我们执行以下命令来设置nat

    #我们设置的隧道网段是192.168.3.0/24。以下设置会将源地址在网段192.168.3.0/24中的请求发送到snat。 #源地址会伪装成出口网卡的IP地址 iptables-tnat-a posting-s192..

    在worker1节点ping Baidu.com



    您可以看到worker1节点可以访问外部网络。

    问题
  • 按照以上步骤设置后无法访问外网?
  • 检查主节点是否开启路由转发功能。该方案要求转发节点开启转发功能。

    打开模式:

  • 需要修改sysctl.conf文件来配置net.ipv4.ip_forward = 1。
  • 执行sysctl -p使其生效。
  • 您可以还会对下面的文章感兴趣

    使用微信扫描二维码后

    点击右上角发送给好友