精华内容
下载资源
问答
  • ADSL拨号代理-构建IP代理

    千次阅读 2018-11-20 18:45:01
    1.拨号上网 adsl - start //开始拨号 ping www . baidu . com //看能否ping通网址 adsl - stop //结束拨号 2.配置代理 以centos7.1为例 安装 yum install -y epel-release yum update -y ...

    购买拨号VPS

    云立方:http://www.yunlifang.cn/ 预装系统centos7.1

    拨号主机设置

    1.拨号上网

    	adsl-start	      //开始拨号
    	ping www.baidu.com    //看能否ping通网址
    	adsl-stop      //结束拨号
    

    2.配置代理

    以centos7.1为例

    安装

    yum install -y epel-release
    yum update -y (执行该命令,会升级系统内核,建议不执行)
    yum install -y tinyproxy
    

    配置

    vi /etc/tinyproxy/tinyproxy.conf
    

    注释掉该行

    Allow 127.0.0.1
    

    启动

    systemctl enable tinyproxy.service 
    systemctl restart  tinyproxy.service
    

    测试

    curl -x IP:PORT www.baidu.com
    

    如果不能通,检查端口是否放行

    firewall-cmd --zone=public  --query-port=8888/tcp
    firewall-cmd --zone=public  --add-port=8888/tcp --permanent
    firewall-cmd --reload
    

    3.安装python3

    CentOS

    sudo yum groupinstall -y development tools
    sudo yum install -y epel-release python34-devel  libxslt-devel libxml2-	devel openssl-devel
    sudo yum install -y python34 python34-setuptools
    sudo easy_install-3.4 pip
    

    Ubuntu

    sudo apt-get install -y python3-dev build-essential libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev
    sudo apt-get install -y python3 python3-pip
    

    4.安装python库

    pip3 install redis tornado requests
    

    5.Clone项目

    git clone https://gitee.com/Nic_LU/adslProxy.git

    可能出现如下错误:
    在这里插入图片描述
    解决:

    yum update nss curl
    

    6.Redis

    配置在固定ip的vps即可,阿里云,腾讯云等等

    7.修改配置

    配置文件是 /adslproxy/config.py

    根据注释修改配置文件,主要修改要点如下:

    ADSL_BASH
    拨号命令,不同主机可能不同,默认 adsl-stop;adsl-start

    PROXY_PORT
    拨号主机代理端口,使用TinyProxy则默认为8888,使用Squid则默认3128,默认8888

    CLIENT_NAME
    客户端唯一标识,不同拨号主机请设置不同的名称,默认adsl1

    ADSL_IFNAME
    拨号网卡名称,主要根据ifconfig命令获取拨号后该网卡的IP,默认ppp0

    REDIS_HOST
    Redis数据库地址,请修改为固定IP的Redis Host,默认localhost

    REDIS_PASSWORD
    Redis数据库密码,如无则填None,默认None

    REDIS_PORT
    Redis数据库端口,默认6379

    PROXY_KEY
    Redis代理池键名开头,默认为adsl

    8.运行

    	 python3 run.py
    
    	(python3 run.py > /dev/null &)     //守护运行
    
    展开全文
  • 也就是它的IP是不固定的,不过既然是拨号上网嘛,速度也是有保障的,用它搭建一个代理,那既能保证可用,又能自由控制拨号切换(抄自知乎)。 借助 ADSL 拨号服务器特点,我们可以获取一个公网 IP,然后借助第三方...

    每一个想学习的念头,都有可能是未来的你在向自己求救。

    1.写在前面的

    本次文章内容需要准备:一台动态 ADSL 拨号服务器,一台普通服务器,一个公网 redis 环境(可以直接部署在前面普通服务器上)。

    首先介绍一下 ADSL,ADSL是一种新的数据传输方式。它因为上行和下行带宽不对称,因此称为非对称数字用户线环路。它采用频分复用技术把普通的电话线分成了电话、上行和下行三个相对独立的信道,从而避免了相互之间的干扰。

    它有个独有的特点,每拨一次号,就获取一个新的IP。也就是它的IP是不固定的,不过既然是拨号上网嘛,速度也是有保障的,用它搭建一个代理,那既能保证可用,又能自由控制拨号切换(抄自知乎)。

    借助 ADSL 拨号服务器特点,我们可以获取一个公网 IP,然后借助第三方工具/软件在服务器上搭建 HTTP 代理就行了。关于搭建 HTTP 代理有很多推荐,比如说 Squid。但是 Squid 这些需要配置信息,对于个人来讲有些麻烦,所以在这篇文章里,我们尝试用 gost 来搭建 HTTP 代理(https://github.com/ginuerzh/gost)。

    2.拨号服务器基操

    在搭建 HTTP 代理之前,还是先说一下拨号服务器常用操作:

    pppoe-start 	  # 拨号
    pppoe-stop  	  # 断开拨号
    pppoe-status   # 拨号连接状态
    

    一般购买拨号服务器之后,使用 ssh 连接上使用pppoe-start命令先进行拨号(不同平台命令可能不一样),成功后可以尝试使用curl ip.sb查看当前获取的新 IP:

    [root@localhost ~]# curl ip.sb 	# 检查当前ip
    171.41.86.191 
    [root@localhost ~]# pppoe-stop 	# 停止当前拨号
    [root@localhost ~]# pppoe-start # 开始拨号
    [root@localhost ~]# curl ip.sb 	# 检查当前ip
    171.41.85.191 
    [root@localhost ~]# 
    

    3.搭建 HTTP 代理

    上面提到使用 gost 搭建 HTTP 代理,现从 GITHUB 上下载对应的平台 / 版本的 gost。我这里下载的是:gost-linux-amd64-2.11.1,你们可以根据自己需要下载合适的版本。下载之后解压之后得到一个可执行文件:

    [root@localhost ~]# ll
    total 31508
    -rw-------. 1 root root     1319 Sep 29  2019 anaconda-ks.cfg
    -rw-r--r--  1 root root  8784858 Dec 14 11:50 file.zip
    -rw-r--r--  1 root root 16830464 May 23  2020 gost-linux-amd64 # 就这个这个
    -rw-r--r--  1 root root  6643001 Dec  8 22:46 proxy_client # 等会用
    [root@localhost ~]# 
    

    确定当前拨号成功后直接执行:

    [root@localhost ~]# mv gost-linux-amd64 gost     # 重命名(可有可无)
    [root@localhost ~]# chmod 777 gost               # 修改权限,必须,不然无法执行
    [root@localhost ~]# ./gost -L=admin:123456@:8123 # 设置代理认证信息
    2020/12/14 13:52:44 route.go:650: auto://:8123 on [::]:8123
    

    这里可以使用 systemctl 给 gost 做个进程守护,在 /etc/systemd/system/ 路径新建文件 gost.service 内容:

    [Unit]
    Description=Gost Proxy
    After=network.target
    Wants=network.target
    
    [Service]
    Type=simple
    ExecStart=/root/gost -L=http://admin:123456@:8123 -L=socks5://admin:123456@:8125 # socks5 根据自己需要设置
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    之后可以直接使用 systemctl 命令控制 gost :

    systemctl daemon-reload
    systemctl enable gost
    systemctl restart gost
    systemctl status gost
    

    此时测试当前 HTTP 代理是否可用:

    ┌──(h1code2㉿LAPTOP-IMECGKD2)-[/mnt/c/Users/h1code2]
    └─$ curl -x http://admin:123456@171.41.85.191:8123 http://httpbin.org/ip # 代理测试
    {
      "origin": "171.41.85.191"
    }
    

    现在代理测试通过,接着我们要做的就是需要实时将服务器最新拨号成功后的 IP 通知到爬虫。在这里我们可以把拨号服务器理解成客户端,正式场景肯定不会只有一台(如图:),所以我们还需要使用一个服务器端来记录和分配最近可用的代理 IP。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QA3tFTft-1607998556105)(https://imgkr2.cn-bj.ufileos.com/efa71921-374d-4478-9021-b0ef775f62ec.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=OzSIOdBMM8HLNcrn20kAB%252BbtCyw%253D&Expires=1608013699)]

    4.客户端 / 服务端实现

    为了简化客户端部署,这里使用 go 语言编写客户端代码,并编译成二进制可执行文件,小伙伴们只需要按照自己的需要增加环境变量即可。这里简单讲一下逻辑,客户端会根据配置的接口信息主动连接服务端,在这个过程中会自动上报当前拨号后的 IP 和端口等信息,服务端响应请求后记录 IP 并返回该客户端是否需要切换 IP 的状态。在上面搭建 HTTP 代理的内容里可以看到与 gost 同级下有个文件 proxy_client,这个就是我们的客户端可执行文件。该程序会读取 7 个环境变量分别是:

    api_host 	# 服务端接口信息host
    api_token 	# 服务端接口验证token 
    username 	# 代理验证用户名
    password 	# 代理验证密码
    http_port 	# http/https代理端口
    socks5_port 	# socks5代理端口
    

    根据需要设置环境变量:

    export api_host=api.h1code2.cn/api/proxy
    export api_token=xfsdfhkjf23rfdwef
    export username=admin
    export password=123456
    export http_port=8123
    export socks5_port=8125
    

    之后执行 export 大概是这个样子:

    [root@localhost ~]# export
    ···
    declare -x api_host="api.h1code2.cn/api/proxy"
    declare -x api_token="xfsdfhkjf23rfdwef"
    declare -x http_port="8123"
    declare -x password="123456"
    declare -x socks5_port="8125"
    declare -x username="admin"
    

    在运行 proxy_client 文件之前我们还需要,简单实现一下服务端的逻辑,这里使用 redis 做了定时缓存等操作,具体逻辑可以自己实现,我这里随便敲的代码渣,作参考就好。

    import ujson as json
    from pydantic import BaseModel
    from fastapi import APIRouter, Request
    from db.session_v2 import redis
    
    router = APIRouter()
    
    hash_key = "proxy-node:hash"
    redis_client = redis()
    
    
    class Proxy(BaseModel):
        http_port: int
        socks5_port: int
        username: str
        password: str
    
    
    @router.get("/all_proxy")
    def all_proxy():
        """
        获取当前所有代理信息
        :return:
        """
        data = {}
        nodes = redis_client.hgetall(hash_key)
        if not nodes:
            return {"message": "success", "code": 200, "data": data}
        for key, value in nodes.items():
            data[key] = json.loads(value)
        return {"message": "success", "code": 200, "data": data}
    
    
    @router.post("/proxy/{node}/")
    def push_proxy_info(node: str, proxy: Proxy, request: Request):
        """
        代理信息上报接口
        :param node: 客户端节点
        :param proxy: 代理信息
        :param request:
        :return: json 包含代理切换状态
        """
        switch_state = False
        string_key = f"{node}:string"
        if redis_client.get(string_key) is None:  # 过期
            switch_state = True
            redis_client.set(string_key, "1", ex=60)
        if redis_client.get(string_key) == "0":  # 手动切换 / 爬虫程序可控
            redis_client.set(string_key, "1", ex=60)
        client_host = request.client.host  # 当前客户端host:port
        # redis_client.hmset(hash_key, dict(proxy)) # 同时设置多值
        _dict = dict(proxy)
        _dict["host"] = client_host
        redis_client.hset(hash_key, key=node, value=json.dumps(_dict))
        return {"message": "success", "code": 200, "data": {"switch_state": switch_state}}
    

    启动 fastapi 服务:

    (proxy-venv) ┌──(h1code2㉿LAPTOP-IMECGKD2)-[/mnt/d/PycharmProjects/proxy-test]
    └─$ uvicorn service.run:app
    INFO:     Started server process [14291]
    INFO:     Waiting for application startup.
    INFO:     Application startup complete.
    INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
    INFO:     171.81.86.81:0 - "POST /api/proxy/node-1/?token=xfsdfhkjf23rfdwef HTTP/1.0" 200 OK
    INFO:     171.81.85.51:0 - "POST /api/proxy/node-1/?token=xfsdfhkjf23rfdwef HTTP/1.0" 200 OK
    INFO:     171.81.85.51:0 - "POST /api/proxy/node-1/?token=xfsdfhkjf23rfdwef HTTP/1.0" 200 OK
    

    因为我这里代理是运行在本地环境的,使用 frp 做了内网穿透,所以此时 proxy_client 等会通过 api.h1code2.cn/api/proxy/node-1 实际连接的是我们本地的 fastapi 服务,这个并不是必须,你可以直接把 fastapi 接口代码部署公网服务器上。

    启动客户端:

    [root@localhost ~]# chmod 777 proxy_client # 修改可执行权限
    [root@localhost ~]# ./proxy_client 
    {node:node-1 HttpPort:8123 Socks5Port:8125 Username:admin Password:123456}
    switch connect status false 1607958301
    switch connect status false 1607958302
    switch connect status false 1607958303
    

    客户端程序启动后,可以查看 redis 中已经记录了拨号代理 IP:

    127.0.0.1:6379[14]> hgetall proxy-node:hash
    1) "node-1"
    2) "{\"http_port\":8123,\"socks5_port\":8125,\"username\":\"admin\",\"password\":\"123456\",\"host\":\"171.81.85.51\"}"
    127.0.0.1:6379[14]> 
    

    也可以通过我们自己实现的接口查看:

    ┌──(h1code2㉿LAPTOP-IMECGKD2)-[/mnt/c/Users/h1code2]
    └─$ curl http://api.h1code2.cn/api/all_proxy
    {
      "message": "success",
      "code": 200,
      "data": {
        "node-1": {
          "http_port": 8123,
          "socks5_port": 8125,
          "username": "admin",
          "password": "123456",
          "host": "171.81.85.51"
        }
      }
    }
    

    测试一下当前代理:

    ┌──(h1code2㉿LAPTOP-IMECGKD2)-[/mnt/c/Users/h1code2]
    └─$ curl -x http://admin:123456@171.81.85.51:81233 ip.sb
    171.81.85.51  
    

    关于 proxy_client 文件我放置在 https://github.com/h1code2/proxy_client ,更多爬虫 / 逆向相关内容可以进球讨论:
    在这里插入图片描述

    展开全文
  • 一:linux搭建代理服务器 0x00 介绍 关于搭建代理服务器的方法,我也是刚刚接触,从网上找了一些能够行得通的方法来给大家做个分享: 这里我用的是Tinyproxy作为代理服务软件。这个东西很小,并没有几M。 tinyproxy...

    一:linux搭建代理服务器

    0x00 介绍

    关于搭建代理服务器的方法,我也是刚刚接触,从网上找了一些能够行得通的方法来给大家做个分享:
    这里我用的是Tinyproxy作为代理服务软件。这个东西很小,并没有几M。
    tinyproxy最大的特点就是小,功能简单,配置简单

    (注意此代理方式为常规使用,并不能进行KX上网吼~)
    想要KX上网的同学,请参考我的上一篇博文咳咳!~

    0x01 安装

    debian系:apt-get install tinyproxy
    centos系:yum install tinyproxy

    编辑配置/etc/tinyproxy/tinyproxy.conf:
    (1)找到Allow 127.0.0.1行,前面加上#号将其注释掉。
    (2)Port 8888:默认开放的端口为8888(可自行更改)

    执行/etc/init.d/tinyproxy restart使配置生效,或者执行systemctl restart tinyproxy.service

    0x02 使用

    在linux终端下,可直接输入以下指令,进行代理:

    export http_proxy=http://xxxxxx:xxxx
    export https_proxy=http://xxxxxx:xxxx

    取消代理
    unset http_proxy https_proxy

    二:蚁剑配置客户端代理

    0x00 简介

    这里给大家分享一下如何用蚁剑来连咱们刚刚做好的代理服务器吧(其实很简单,只不过这里加了些对我蚁剑使用的描述)

    0x01 实验环境

    (1)首先我们客户端做代理的前提就是代理服务器已经搭好,现在假设我们已经做好了一个代理服务器:

    ip地址为:45.76.xxx.xxx,端口号:8888

    (2)在蚁剑的客户端中找到代理设置:将ip及端口号,填写进去:
    1561366-20190726163958660-1513640865.png

    (3)测试连接:上面有个测试连接,我们试试百度的网址能不能访问到:
    1561366-20190726164009204-2087846842.png

    (4)最重要的一步,要点击上面的“保存”啊!

    (5)如果这里没有连接成功的话,看一下是否互相ping通及www.baidu.com。

    如果还是不行的话,有可能是防火墙存在保护,可尝试使用下条指令:

    iptables -I INPUT -p tcp --dport 8888 -j ACCEPT

    (这句策略就是允许访问3218端口的tcp数据包通过)

    0x02 使用代理

    虽说蚁剑显示成功设置代理,那么如果还是不放心,那就自己实践一下吧(正片开始):

    (1)实验环境:
    这里我用到了3台主机:本机、VPS1、VPS2:本机使用蚁剑、VPS1为代理服务器、VPS2为目标站点(WEB网站)

    (2)我已经为WEB2安装好了apache2、php7、mysql,可以正常使用网站功能,同时我在VPS2下写了一个后门(config.php),为了让蚁剑去连接。

    (3)所有准备工作做好之后,我们用挂了代理的蚁剑去连接目标站点。连接成功之后,看一下VPS2主机中Apache下的日志文件:
    1561366-20190726164150398-14104900.png

    (4)这里就可以看到我们的请求信息,已经不再是本机的ip了,变成了VPS1的IP,也就是代理服务器的IP。

    (5)这里我看见后面的“antSword/v2.0”很不舒服,很明显不是正常的user-agent,那么我们就在蚁剑中给他改为最普通的:
    1561366-20190726164205963-1589706198.png

    (6)改好之后,再用蚁剑去连,发现请求信息中的user-agent已经变成了我们所改的:

    (7)除了改user-agent,蚁剑中还有好多地方可以去改的,很轻松的就能做到比较简单的流量信息混淆。

    除此之外,更多有关蚁剑的使用方法,都在蚁剑官方使用手册中:
    https://doc.u0u.us/zh-hans/index.html

    转载于:https://www.cnblogs.com/-mo-/p/11251369.html

    展开全文
  • 时间过得真快,距离这个系列的上一篇文章《商业级4G代理搭建指南【准备篇】》发布的时间已经过了两个星期了,上个星期由于各种琐事缠身,周二开始就没空写文章了,所以就咕咕咕了。 那么在准备篇中,我们了解了一下...

    时间过得真快,距离这个系列的上一篇文章《商业级4G代理搭建指南【准备篇】》发布的时间已经过了两个星期了,上个星期由于各种琐事缠身,周二开始就没空写文章了,所以就咕咕咕了。

    那么在准备篇中,我们了解了一下搭建 4G 代理所需要的软硬件,也知道了各种选择的优劣势。现在,我们就可以开始实际搭建了,相信大家也是期待已久了。


    基本思路

    从这篇文章的标题中我们可以看出,这一次的搭建方案主要用到的是 Docker,你可能会很好奇,Docker 跟搭建 4G 代理有什么关系吗?

    嗯,关系很大,我们把整件事情梳理一下,先来看看搭建 4G 代理时的基本流程:

    1. 调用网卡拨号,拨号成功后会创建一个虚拟网卡。(正常情况下使用这个虚拟网卡就能上网了)
      在这里插入图片描述

    2. 在多网卡的情况下,重复第一步,会得到多个虚拟网卡。

    在这里插入图片描述

    1. 启动代理服务器,使其使用虚拟网卡作为出网网卡,并使用接入内网的实体网卡作为入网网卡。
      在这里插入图片描述
      但是呢,有个问题,根据我之前的测试结果来看,目前在 Linux 环境下还没有一个 HTTP 代理服务器是可以做到分别指定出网网卡和入网网卡的,嗯…这就很麻烦了,因为如果我们无法这么做的话,就会出现类似于下面这样的问题:

    2. 出网和入网都在虚拟网卡上,使用代理服务器必须要走公网访问。

    3. 入网为实体网卡,但出网被代理服务器锁定为了某一个,无法利用到多网卡。

    嗯…那么不用 HTTP 代理服务器,用那些经常被用来做一些骚操作的 Socks5 代理服务器呢?如果可以指定网卡的话,再用像 Privoxy 之类的工具把 Socks5 代理转成 HTTP 代理就好了。(某知名扶墙软件的 Windows 版本就是这么转的 HTTP 代理)

    在经过一番尝试后,我发现虽然有些 Socks5 代理服务器的文档中是说可以指定网卡,但按照说明操作后,似乎并不能直接做到我想要的效果(要么还是锁定在某一个上面、要么上不了网),所以还是存在一些问题的。可能是需要配合路由表设置来进行操作吧,不过我对网络工程的了解不怎么深,搞了几天也没搞出来,于是乎还得想想别的办法。
    在这里插入图片描述
    这时候,我想到了一个东西——Docker,它可以用来解决这个问题!

    因为 Docker 容器被创建后,不管外界的网卡有多少个,容器内部的网卡都只会有一个Docker自己的虚拟网卡(容器间通信用的)和一个本地环回接口(不用管它),而且我们在容器内进行拨号操作时,产生的那个新的虚拟网卡也不会影响到外界或其他容器,这样的话,代理服务器就不需要指定网卡了,直接启动就能跑!

    那么现在整个流程就跑通了,进入实际操作环节看看吧!


    系统方面

    这个 Docker 版的搭建方式,系统方面的选择很多,由于我使用的样例设备是树莓派,所以这里就选择使用了 Raspbian(树莓派专属版 Debian)。如果你使用的是其他设备的话,直接选择一个自己常用的系统就好。

    那么准备好之后的第一步当然是先下载并安装 Docker,这里我直接使用 Docker 官方提供的一键安装脚本来进行安装:

    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh
    # 出自官方文档:https://docs.docker.com/install/linux/docker-ce/debian/#install-using-the-convenience-script

    这个一键安装脚本理论上来讲所有 Linux 发行版都可以使用,毕竟已经出来很长时间了,如果不行的话请自行使用搜索引擎查找相关资料。

    装好 Docker 之后,你有两个选择:

    1. 进入体验模式,了解一下具体操作细节是怎么样的。
    2. 不看这一段,翻到本文最下方直接使用我写好的轮子。

    启动容器

    体验的话,我们就直接这么启动一个 Docker 容器吧,执行以下命令:

    sudo docker run -it --rm --privileged -p 3128:3128 ubuntu:18.04 bash

    上面这条命令的意思是,启动一个内部系统为 Ubuntu18.04 的容器,并进入容器内部的 Shell 执行 bash 命令,如果退出 bash 就自动销毁容器;然后映射容器内的端口3128到外界,映射出来的外界端口也是3128;最后 privileged 参数是开启特权模式,用于将网卡设备映射进容器内。

    如果下载镜像很慢的话,可以搜一下“Docker 加速器”,也可以直接扶墙。

    测试一下网卡是否正常

    进入容器内部后,我们可以执行一下 ls /dev/ttyUSB* 看一下网卡有没有正常被识别出来(在容器外也是一样的,因为开了特权模式),如果是和我买的同一款 4G 网卡的话,在只插入一张网卡的情况下你会看到4个 ttyUSB 设备。
    在这里插入图片描述

    不同 4G 网卡和硬件组合可能会有差异,请以实际情况为准。

    如果你可以看到4✖4G网卡个数个 ttyUSB 设备的话,就说明没有问题,可以开始下一步了。

    拨号上网

    接下来要做的就是拨号了,拨号方面可以选择使用 Wvdial 这种工具,也可以选择使用像 Fanconn 这样的商家提供的拨号脚本(直接调用 PPPD),使用起来的效果会有一些区别。如果商家没有提供拨号脚本的话,就用 Wvdial 吧,它能自动生成配置,上手即用。

    我这边的话,由于 Fanconn 的技术人员直接提供了个拨号脚本,那我就用这个脚本了,Wvdial 的文档网上有很多很详尽的,这里就不再多提,需要的朋友自行搜索即可。

    如果你用的是 Fanconn 的这个拨号脚本(怎么弄进容器内就不用我说了吧?),那么直接在 apt install ppp 安装好拨号工具之后,用 chmod +x quectel-pppd.sh 给拨号脚本加个运行权限,然后 ./quectel-pppd.sh /dev/ttyUSB3 即可。

    拨号时使用的 /dev/ttyUSB3 是指 4G 网卡的第四个通信端口,文档中的解释为:ttyUSB3→For PPP connections or AT command communication,翻译一下就是用于 PPP 连接或 AT 命令通信。

    拨号之后用 ifconfig 之类的工具即可看到类似下图中的状态:
    在这里插入图片描述
    可以看到,如前文所述,现在有三个网卡,一个是 Docker 自己的、一个是本地环回接口(这个不用管)、一个是拨号产生的虚拟网卡。

    如果不是在 Docker 容器内使用的话,还会有个 wwan0(或其他名字),那个是 4G 网卡本体。

    测试是否能正常上网

    现在如果你用 curl 的 --interface 参数指定虚拟网卡进行请求的话(如:curl --interface ppp0 https://ip.cn),是已经可以请求成功的了,IP 也会是你所使用的 SIM 卡对应的运营商分配的。

    由于 Docker 的镜像通常都是极度精简的,所以 Ubuntu 镜像里并没有预装像 net-tools、iputils-ping、vim、curl 之类的这些包,需要自行安装。所以如果你发现 ifconfig、ping、curl、vim 用不了,不要惊慌,这是正常现象,执行 apt install 包名 命令安装即可。

    如果你无法直接请求成功的话,就可能是 DNS 解析出问题了,可以尝试 ping 一个公网 IP(如:ping 1.1.1.1)和一个域名(如:ping ip.cn),如果 IP 能 ping 通但域名会报 DNS 解析失败的话,就可以确认是 DNS 设置问题了。

    4G 拨号时如果出现 DNS 设置问题,通常是因为拨号工具没有正常地将运营商返回的 DNS 服务器设置写入到配置中,我们可以手动配置一下(你要强制指定某一个 DNS 也可以):

    # 以下为阿里云的公共DNS
    echo 'nameserver 223.5.5.5' >> /etc/resolv.conf
    echo 'nameserver 223.6.6.6' >> /etc/resolv.conf

    在 Docker 容器中,这个 /etc/resolv.conf 文件可能还会有两条内容,是容器本身所需要的,建议不要删除/覆盖,否则会出现容器间无法使用容器名互相通信的情况。

    启动代理服务器

    那么在测试拨号后确实可以通过 4G 网卡上网了之后,我们就可以把代理服务器启动了,这里我使用的是 TinyProxy。

    测试发现,Squid 对资源的占用更大一些,不利于多网卡情况下的使用,会影响到 4G 网卡的数量上限。

    apt install tinyproxy 一波,然后 vim /etc/tinyproxy/tinyproxy.conf 修改一下配置。

    要修改的配置主要有:

    • Port 配置项改为3128,因为我们前面映射出来的端口是3128。
    • Listen 配置项改为0.0.0.0,因为我们需要在其他设备上使用这个代理服务器。
    • Allow 配置项注释掉或改为0.0.0.0/0,默认的127.0.0.1会导致其他设备无法访问。

    改完之后保存一波,然后就可以直接执行 tinyproxy 启动了…吗?

    等等,还有一个操作要做!那就是将默认路由指向到虚拟网卡上,很简单,执行以下命令即可:

    route del -net 0.0.0.0 eth0
    route add -net 0.0.0.0 ppp0

    这两条命令的意思是:先将默认的、指向 eth0 这个网卡的上网路由删除,然后添加一个同样的、指向 ppp0 这个网卡的路由。

    改完默认路由后的效果就是,即使你不使用 curl 的 --interface 参数,也能直接使用 4G 网卡上网了。

    如果没有改默认路由的话,在不指定网卡的情况下,4G 网卡并不会被使用到,因为默认路由指向的是 Docker 自身的虚拟网卡,那个网卡通向你原本的内网环境。也就是说,IP 不会变!

    那么现在,你可以执行 tinyproxy 启动代理服务器了。

    测试代理服务器

    好了,代理服务器应该已经正常启动了,现在我们可以在另一个设备上尝试连接那个容器中的代理服务器,看看是否能正常通过它使用 4G 网卡上网。

    例如我这里树莓派分配到的IP是:192.168.137.66,那么我就可以用这样的 curl 命令或 Python 代码进行测试:

    curl:

    curl "https://ip.cn"
    curl -x "192.168.137.66:3128" "https://ip.cn"

    Python:

    import requests
    resp = requests.get("https://ip.cn", proxies={"https": "http://192.168.137.66:3128"})
    no_proxy_resp = requests.get("https://ip.cn")
    print(resp.text)
    print(no_proxy_resp.text)

    测试出来的结果应该与前面在容器内部测试时的一致,在使用代理后 IP 就变成了运营商分配的基站 IP。

    更换 IP

    那么最核心的问题来了,怎么更换 IP 呢?

    其实和使用那些拨号 VPS 架设代理服务器一样,我们只需要重新拨个号就能换 IP 了,直接 kill 掉 pppd 进程就可以让它断开拨号,断开后重新执行一遍拨号脚本就是重新拨号了。

    断开拨号方面 Fanconn 的技术人员也提供了一个脚本,同样在 chmod +x quectel-ppp-kill 赋予运行权限之后,执行 ./quectel-ppp-kill 就可以了。

    但需要注意的是,蜂窝网络的拨号在断开后,IP 仍然会保留一段时间(具体多久不清楚,可能跟连接的基站也有关系),所以我们需要强制性地让网卡重新搜网。

    冷门小知识:手机上开启关闭飞行模式的效果就是重新搜网,通常只是关闭“移动数据”的话,效果是与断开拨号一致的。

    怎么做呢?很简单,就两行命令:

    AT+CFUN=0
    AT+CFUN=1
    

    但注意哦,这是 AT 命令,不是 Linux 下的 Shell 命令,AT 命令是一种调制解调器命令语言,我们如果需要将它执行起来,需要这么做:

    echo "AT+CFUN=0" > /dev/ttyUSB2
    # 中间间隔1秒左右
    echo "AT+CFUN=1" > /dev/ttyUSB2

    这里使用的 /dev/ttyUSB2 是指 4G 网卡的第三个通信端口,文档中的解释为:ttyUSB2→For AT command communication,与第四个通信端口类似,只是它不能用于 PPP 连接、只能用于 AT 命令通信而已。

    不同样使用第四个通信端口的原因是那个端口有被占用的可能性,直接区分开最稳妥,本来网卡也就是提供了两个 AT 命令通信渠道的。

    在使网卡重新搜网后的几秒至十几/几十秒内的时间里,你无法正常拨号,需要等待它初始化完成后才可以拨号成功,具体等待时间以信号强度为准,我测试的时候通常5秒以内就可以了。

    所以如果你在断开后一直拨号失败,不妨过一会儿再试。


    总结

    那么现在操作流程也跑通了,我们也了解到了整个的内部细节,最后要做的就是把每个网卡都分别分配一个容器,这样我们就能实现文章开头所提到的——“使用虚拟网卡作为出网网卡,并使用接入内网的实体网卡作为入网网卡”的效果了。

    实际操作起来的话,就是把指定网卡的部分给配置化,然后在启动容器的时候传入就好了,使用 Docker 的容器环境变量相关设置可以很轻松地实现这个功能。

    最后,我们可以以这个思路,构建一个 docker-compose 模板,模板的核心内容一是做个简易的4G网卡容器集群,二是启动个 Squid,用来聚合代理服务器,这样我们使用的时候只需要指定一个代理服务器就能随机更换了,操作起来更加方便。


    好了,上面就是 Docker 版搭建方式的思路和整个的搭建流程,如果你懒得看的话,直接用我写好的轮子也是可以的,只需要发送消息【Docker版4G代理】到公众号【NightTeam】即可。

    评价

    最后的最后,我给这个搭建方式打个评价吧。

    这个搭建方式并不完美,因为变量太多,而且很多地方肯定不如系统级原生支持的那么稳定,长期使用可能会出现各种奇奇怪怪的问题。

    然后 Docker 的资源占用其实挺高的,会浪费相当多的内存在启动容器上,如果只是两三个网卡还好,如果数量大一点的话,像树莓派2B 这种小内存的设备根本就扛不住。

    另外代理服务器本身对资源的消耗也是比较高的,高频调用下对树莓派2B 的小 CPU 压力还是蛮大的,即使我对它的 CPU 进行了超频,在并发测试时也还是会出现轻松打满 CPU 的情况。

    但是!截止目前,我还有两种基于路由器系统的搭建方案没写出来!所以…敬请期待后续的其他搭建方案(斜眼笑)。


    作者:「夜幕团队 NightTeam」 - Loco

    夜幕团队成立于 2019 年,团队包括崔庆才、周子淇、陈祥安、唐轶飞、冯威、蔡晋、戴煌金、张冶青和韦世东。

    涉猎的编程语言包括但不限于 Python、Rust、C++、Go,领域涵盖爬虫、深度学习、服务研发、对象存储等。团队非正亦非邪,只做认为对的事情,请大家小心。

    展开全文
  • CentOS搭建Socks5 Proxy代理服务器

    万次阅读 2017-12-08 17:09:03
     SOCKS5 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全。  正常情况下客户端和服务端的通信...
  • 本文主要介绍利用 DNS 查询流量来封装 TCP 流量 , 达到绕过防火墙的目的,搭建DNS隧道,绕过网络认证,实现上网
  • 代理服务器搭建socks5环境的方法

    万次阅读 2016-12-23 00:50:08
    转:http://www.ccproxy.com/socks5-dai-li.htm SOCKS5搭建准备工作 1) 一台VSP服务器(或者朋友的电脑),假如公网IP地址为:202.6.6.6 2) 一台客户端 3) 一套CCProxy软件(下载地址...SOCKS5搭建要求
  • 文章目录关于代理的分类:透明代理(Transparent Proxy)匿名代理(Anonymous Proxy)混淆代理(Distorting Proxies)高匿代理(Elite proxy或High Anonymity Proxy)匿名程度检测方法(实践上面介绍知识点)1. 检测HTTP代理匿...
  • ADSL 拨号代理搭建

    千次阅读 2019-02-18 00:13:47
    ADSL拨号代理搭建 我们尝试维护过一个代理池。代理池可以挑选出许多可用代理,但是常常其稳定性不高、响应速度慢,而且这些代理通常是公共代理,可能不止一人同时使用,其IP被封的概率很大。另外,这些代理可能...
  • Socks5属于明文代理,不要用于科学上网,否则会被阻断端口,可用于正常的跳板使用; 比如SSH转发加速国外VPS的连接速度,特别是一些延迟高或者丢包高的VPS; 使用Socks5转发后SSH就可以快速稳定的连接了,解决高丢包...
  •   我们用电脑、平板、手机等访问互联网时,本地设备和服务器之间的通信有可能因为某些不可控因素被... 代理服务器可以绕过许多基于IP地址的限制。例如某视频网站只允许日本的IP访问,那么可以借助一台在日本的...
  • 在开始之前,可能需要大家提前了解一下为什么我们要用 4G 搭建代理,可以看下这篇文章: 震惊,商业级4G代理居然只需要用这些... ,看完之后,大家再返回到本文就能比较顺畅地切入了。 “ 阅读本文大概需要 8 分钟...
  • 通过xshell实现ssh代理服务访问

    千次阅读 2019-07-29 09:31:20
    通过xshell实现ssh代理服务访问 ssh远程连接到Linux 在空白处右键:add。在弹出的Forwarding Rule,按照如图所示进行配置,Type选择“Dynamic(SOCK54/5”;Listen Port我使用默认的1080,这里也...
  • 提示 ... 浏览器显示 您的请求过于频繁,IP已经被暂时封禁,请稍后再试! ...找免费代理?可行,不过我之前测过不少...可以可以,不过优质的代理服务商价格可是不菲的,我买过一些廉价的,比如几块钱套餐一次提取几...
  • 亚马逊AWS-EC2云服务器部署代理服务

    千次阅读 2019-07-18 10:52:15
    首先,在此阿里云/腾讯云/华为云购买一个 VPS 推荐使用阿里云的 香港服务器,毕竟香港里大陆很近,所以延迟会低很多 首先链接你的VPS,可以使用X-shell / Putty / SecureCRTPortable 等SSH链接工具 注意:如果不知道...
  • 时间过得真快,距离这个系列的上一篇文章《商业级4G代理搭建指南【准备篇】》发布的时间已经过了两个星期了,上个星期由于各种琐事缠身,周二开始就没空写文章了,所以就咕咕咕了。...
  • 使用frp代理本地机器到公网 首先购买一个最最便宜的服务器 突发性能即可(双十一大优惠更好) (我安装的是CentOS 7.2 网络按流量) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KnpsBWiI-...
  • 如何使用代理服务器上网

    千次阅读 2014-01-30 15:39:53
    前几天,有两个同事咨询过我,如何使用代理上网,我发现其过程还是挺多的,与其我一步步讲给他们听,不如写一个教程,这样他们也更能理解和操作。下面我就介绍一下我是怎么使用代理服务器的,算是一篇科普教程吧。 ...
  • 在实验室的服务器搭建了ubuntu虚拟机并且配置了LAMP环境与tomcat,开启了ssh,关闭了防火墙,打开了火狐浏览器输入学号密码连接了校园网。虚拟机IP地址:10.10.10.170问题:在实验室利用xshell,用ssh协议连接上了...
  • fedora28客户端使用***+proxychains实现代理上网 有些时候我们在终端会做一些网络操作,比如下载gradle包等,由于一些你懂我也懂的原因,某些网络操作不是那么理想,这时候我们就需要设置代理来自由地访问网络。 *...
  • 实现校园网花样上网方法

    万次阅读 多人点赞 2019-10-12 19:50:59
    突破校园网,实现校园网花样上网方法 通过几种不同的方法, 适用于不同情况的校园网. 本文档遵循以下规则, 请注意阅读: 文档为了严密性,所有专业名词均采用术语,不认识的术语请查阅资料, 为了安全起见, 本文一律不...
  • 在远程vps用docker方式安装squid3 docker run -d -p 3000:3128 --rm sameersbn/squid:3.3.8-14 映射到宿主机端口是3000 在本地用ssh连接到远程vps的相应端口(具体命令ssh -f -N -L 3000:...
  • 1 .清除旧规则 ,一定得记得清nat记录,不清除会越加越多。 iptables -F iptables -X iptables -t nat -F iptables -t nat -X ---查看nat: # iptables -t nat -nL ---查看 #iptables -nvL -t nat --line-numbers ...
  • 拨号VPS也就是的动态IP的VPS,通过拨号换IP的VPS,一般平常我们用来做网站对外提供服务的的VPS是一个固定IP,而拨号VPS通过ADSL线路拨号上网,每拨号一次,就变一次IP,通过很多IP地址用于切换,所以主要用于那些...
  • 们尝试维护过一个免费的代理池,但是代理池效果用过就知道了,毕竟里面有大量免费代理,虽然这些代理是可用的,但是既然我们能刷到这个免费代理,别人也能呀,所以就导致这个代理同时被很多人使用来抓取网站,所以当...
  • 服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,某些科学上网工具扮演的就是典型的正向代理角色。用浏览器访问http://www.google.com时被墙了,于是你可以在国外搭建一台代理服务器,让...
  • XShell配置Socket5代理

    千次阅读 2015-07-16 14:26:34
    在弹出的窗口选择Forwarding Rules, 在空白处右键:add。在弹出的Forwarding Rule,Type选择“Dynamic...这时浏览器就可以使用代理上网了。以FireFox为例,选项—高级—网络—设置—手动配置代理—Socks主机写127.0
  • 记一次失败的regeorg+proxifiler代理... 当该文件被成功从上传后我们访问他可以看到 出现该字样表示我们的正向代理运行正常 3.2 启动regeorg 在我们的vps上面执行这样的语句, python reGeorgSocksProxy.py -p 7777 -u ...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 231
精华内容 92
关键字:

vps搭建代理上网