内部网络如何通过代理访问其他网络?想必一些朋友曾经或现在已经有了一些妙招,但这些妙招是如何实现的呢?今天笔者就带大家解开其中的秘密。

中继代理原理

正常网络访问

正常网络访问.png

首先我们先了解一下正常的网络访问,如图,内部客户端通过防火墙访问外部云服务,但随着策略规则的增加,内部客户端通过防火墙访问外部云服务的这条链路被阻断,如下图所示。

正常网络访问受阻.png

代理网络访问

代理网络访问.png

此时,有人会选择使用代理来访问外部云服务,这里的代理访问一般都是加密的,但也不排除使用socks5之类的代理,如图所示。但这类代理一般建立在外部网络上,而内部客户端如想访问该代理服务器,也会通过防火墙,即使是加密访问代理服务器,也有可能被阻断,如下图所示。

代理网络访问受阻.png

中继代理网络访问

普通中继代理网络访问.png

当代理网络访问受阻时,有人发现只有内部客户端访问外部网络时会被阻断,而内部服务器访问外部网络一般不会被阻断,因此有人选择在内部网络中搭建一个代理服务器,以下简称内部服务器,由内部服务器进行加密代理。

这种中继代理网络访问已经比较靠谱了,但寻找合适的内部服务器却是大难题,因为你不知道哪个内部服务器可以通过防火墙,什么时候又不可以通过。因此存在这种可能性,经过此内部服务器的流量不知道什么时候就会被阻拦,如下图所示。

普通中继代理网络访问受阻.png

具体而言,这类内部服务器一般指联通的AS9928骨干网(原网通国际骨干网)。

特殊中继代理网络访问

特殊中继代理网络访问.png

普通中继代理存在很多不可靠性,此时有人发现大型云厂商因为会提供多网络的服务器,在这些服务器内部通常使用私有网络连接,这些私有网络不经过防火墙,因此比普通中继网络代理稳定了许多。

这种私有网络分为两类,一类是IPLC(国际专线),根据中国电信的介绍,IPLC具有严格的带宽保证、带宽独享、全透明的端到端,它由物理的电缆构成,可承载多种业务,例如以太网,一条物理电缆可以承接多用户,但这些用户的数据在时间上是隔离的,即时分复用。另一类是IEPL(国际以太网专线服务),根据中国电信的介绍,它基于MSTP平台,直接对客户提供以太网服务。

实验

由于笔者没有服务器,因此只能在vmware虚拟机上进行实验,实验系统均为debian 11.5.0版本,代理软件为v2ray。

网络划分如下:

  1. vmnet2,192.168.70.0/24网段,代表纯内网。
  2. vmnet1,192.168.52.0/24网段,代表云厂商私有网络。
  3. vmnet0,192.168.10.0/24网段,代表云服务网络。

虚拟机配置

  1. inner_client,表示内部客户端,网卡1,ens33:vmnet2,192.168.70.100。
  2. inner_server,表示内部服务器,网卡1,ens33:vmnet2,192.168.70.200,网卡2,ens34:vmnet1,192.168.52.200
  3. out_server,表示外部服务器,网卡1,ens33:vmnet1,192.168.52.210,网卡2,ens34:vmnet0,192.168.10.210

具体方案如图:

网络流量代理实验.png

out_server配置

/etc/network/interfaces

auto ens33
iface ens33 inet static
        address 192.168.52.210
        netmask 255.255.255.0

auto ens34
iface ens34 inet static
        address 192.168.10.210
        netmask 255.255.255.0
        gateway 192.168.10.1

/etc/v2ray/config.json

{
    "log":{
        "access":"/var/log/v2ray/access.log",
        "error":"/var/log/v2ray/error.log",
        "loglevel":"debug"
    },
    "inbounds":[
        {
            "port":10086,
            "listen":"192.168.52.210",
            "protocol":"socks",
            "settings":{
                "auth":"noauth",
                "udp":true,
                "ip":"192.168.52.210",
                "accounts":[
                    {
                        "user":"test",
                        "pass":"root"
                    }
                ]
            }
        }
    ],
    "outbounds":[
        {
            "protocol":"freedom",
            "settings":{

            }
        }
    ]
}

此时可通过下面的方式进行验证:

curl -i -x socks5://test:root@192.168.52.210:10086 http://baidu.com

如果返回下面的内容,则表示成功。

HTTP/1.1 200 OK
Date: Fri, 07 Oct 2022 03:06:07 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Sat, 08 Oct 2022 03:06:07 GMT
Connection: Keep-Alive
Content-Type: text/html

<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>

inner_server配置

/etc/network/interfaces

iface ens33 inet static
        address 192.168.70.200
        netmask 255.255.255.0

auto ens34
iface ens34 inet static
        address 192.168.52.200
        netmask 255.255.255.0
        gateway 192.168.52.1

/etc/v2ray/config.json

{
    "log":{
        "access":"/var/log/v2ray/access.log",
        "error":"/var/log/v2ray/error.log",
        "loglevel":"debug"
    },
    "inbounds":[
        {
            "port":10084,
            "protocol":"vmess",
            "settings":{
                "clients":[
                    {
                        "id":"b831381d-6324-4d53-ad4f-8cda48b30811",
                        "alterId":64
                    }
                ]
            }
        },
        {
            "port":10085,
            "listen":"192.168.70.200",
            "protocol":"socks",
            "settings":{
                "auth":"noauth",
                "accounts":[
                    {
                        "user":"test",
                        "pass":"root"
                    }
                ],
                "udp":true,
                "ip":"192.168.70.200",
                "userLevel":0
            }
        }
    ],
    "outbounds":[
        {
            "protocol":"socks",
            "settings":{
                "servers":[
                    {
                        "address":"192.168.52.210",
                        "port":10086
                    }
                ]
            }
        }
    ]
}

由于这台服务器目前已经不能连接任何外部网络,因此拿不到dns,所以只能连接192.168.10.0/24网络下的服务进行测试,这里笔者用了路由器的地址进行测试,大家可以自行搭建服务测试。

curl -i -x socks5://test:root@192.168.70.200:10085 http://192.168.10.1

或者使用这台虚拟机上的firefox进行测试,在firefox配置的网络设置中,手动配置代理,socks服务器选择192.168.70.200,端口记得填写为10085。然后启用使用SOCKS v5时代理DNS查询,启用启用基于HTTPS的DNS,提供商选择https://dns.alidns.com/dns-query。此时就可以使用firefox访问百度了。

inner_client配置

/etc/network/interfaces

auto ens33
iface ens33 inet static
        address 192.168.70.100
        gateway 192.168.70.1
        netmask 255.255.255.0

/etc/v2ray/config.json

{
    "log":{
        "access":"/var/log/v2ray/access.log",
        "error":"/var/log/v2ray/error.log",
        "loglevel":"debug"
    },
    "inbounds":[
        {
            "port":1080,
            "listen":"0.0.0.0",
            "protocol":"socks",
            "settings":{
                "auth":"noauth",
                "udp":true,
                "ip":"192.168.70.100"
            }
        }
    ],
    "outbounds":[
        {
            "protocol":"vmess",
            "settings":{
                "vnext":[
                    {
                        "address":"192.168.70.200",
                        "port":10084,
                        "users":[
                            {
                                "id":"b831381d-6324-4d53-ad4f-8cda48b30811",
                                "alterId":64
                            }
                        ]
                    }
                ]
            }
        }
    ]
}

由于这台虚拟机目前已经不能连接任何外部网络,因此拿不到dns,所以只能连接192.168.10.0/24网络下的服务进行测试,这里笔者用了路由器的地址进行测试,大家可以自行搭建服务测试。

curl -i -x socks5://test:root@192.168.70.100:1080 http://192.168.10.1

或者使用这台虚拟机上的firefox进行测试,在firefox配置的网络设置中,手动配置代理,socks服务器选择192.168.70.100,端口记得填写为1080。然后启用使用SOCKS v5时代理DNS查询,启用启用基于HTTPS的DNS,提供商选择https://dns.alidns.com/dns-query。此时就可以使用firefox访问百度了。

小结

由于是手动配置IP,因此out_server需要配置系统dns,调整/etc/systemd/resolved.conf,在其中增加DNS指向223.5.5.5

由于代理都作用在应用层,并且有加解密任务,因此网速不会特别高,取决于cpu的执行速度,以及是否有硬件加解密芯片。

标签: Linux, LinuxAppGuide, Proxy

仅有一条评论

  1. 这个技术掌握了可以经常外面混,不过还是要注意安全

添加新评论