adsl 다이얼 서버 구축 프록시 풀

9876 단어 대리

1. 도구 준비

  • 동적 vps: 저는 클라우드 입방의 동적 vps, 0.5G 메모리, 11G 하드디스크, 20G 광대역을 사용합니다. 1년에 1800위안입니다. 동적 vps는 주로 에이전트 서비스를 운행하고 광대역을 소모합니다. 다이얼을 통해 IP를 교체하여 동적 에이전트의 효과를 실현합니다
  • 고정 IP 서버: 사용하는 아리운 서버, 1코어 1G 메모리, 40G 클라우드 디스크, 1년 836위안, 이 서버는 주로 동적 vps의 IP를 실시간으로 얻고 대외적으로 인터페이스를 제공한다. 이런 서비스는 자원을 많이 소모하지 않고 이 서버는 파충류를 타거나 사이트를 만들 수 있다

  • 2. 환경 구축


    동적 vps

  • 기능: 프록시 서비스를 구축하고 vps에서 전화를 걸어 IP를 전환함으로써 전환된 IP를 고정 IP의 서버에 전송한다
  • 도구: 프록시 서비스 - tinyproxy, IP-python의 requests 라이브러리 발송
  • 시스템: 구름 입방의 미리 설치할 수 있는 시스템입니다. 저는 CentOS7.1시스템을 선택하여 관리 백그라운드에서 조작합니다
  • 연결 서버: sshuser@ip -p port
  • 다이얼 조작: 네트워크 끊기:adsl-stop, 다이얼:adsl-start
  • 공망 보기 IP:curl icanhazip.com
  • 에이전트 보기 IP:curl-x'ip:port'- vicanhazip.com
  • IP 변화 여부를 판단: 먼저 공망 IP를 확인한 다음에 연결을 끊고 다시 전화를 걸고 공망 IP를 본다. 변화가 없으면 몇 번 더 시도할 수 있다. 확률적으로 재방송 후에도 공망 IP는 변하지 않는다

  • 1. 에이전트 서비스 구축:tinyproxy
    설치 명령:
    #  EPEL , yum :
    sudo yum install epel-release
    sudo yum update
    #  
    sudo yum install -y tinyproxy
    

    구성을 수정하려면 다음과 같이 하십시오.
    vim /etc/tinyproxy/tinyproxy.conf
      Port  ,  8888
    Port 8888
      Allow 127.0.0.1

    서비스 시작: 서비스 tinyproxy start 로그:/var/log/tinyproxy/tinyproxy.log 로컬 테스트:curl-x'ip:port'- vicanhazip.com
    주의점 & 구덩이:
  • 제가 처음에 사용한 깨진 VPS는 이 단계에 와서 vps에서 랜 IP로 프록시 서버를 통해 접근할 수 있지만 로컬에서 공망 IP를 통해 접근할 수 없습니다. 마지막으로 외부 네트워크가 이 서버에 접근할 수 없기 때문에 오픈 포트 등 조작을 시도했지만 결과가 없습니다. 클라우드 큐브는 직접 공망 IP를 통해 프록시를 사용할 수 있습니다
  • yum 설치 시 오류 보고: yum doesn't have enough cached data to continue, 해결 방법:
  • repos.d/epel.repo의mirrorlist는baseurl로 변경되었습니다
  • /etc/resolv.conf 파일에nameserver 144.144.144.144를 추가합니다


  • .재방송을 끊을 때 때때로adsl-start가 실행에 실패할 수 있습니다. "/usr/sbin/adsl-start: line 217:5749 Terminated C O N E C T'CONNECT'CONNECT'@'>/dev/null2>&1'입니다. 마지막으로 연결을 끊는 것이 불결할 수 있습니다. adsl-start를 몇 번 더 실행하면adsl-start를 실행하면 성공합니다
  • 프록시 서비스인 tinyproxy가 실행되는 동안 이 오류를 보고했습니다. Waiting servers(0) is less than MinSpareServers(5).Creating new child.,최대 연결 수에 도달하여 새로운 연결 처리 요청을 만들 수 없기 때문에 프록시 서비스도 끊겼습니다. 프록시 서비스를 다시 시작하면 됩니다. 해결 방법
  • tinyproxy 서비스를 정시에 재개합니다
  • 구성을 수정합니다
  • vim /etc/tinyproxy/tinyproxy.conf
    MaxClients 100 -> 500  #  
    Timeout 600 -> 20  #  
    

    2. Python 환경 구축
    (1) Python Python 종속 설치
    sudo yum install yum-utils
    sudo yum-builddep python
    

    파이썬 소스 연결:https://www.python.org/ftp/python/
    curl -O https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz
    

    저는 curl을 사용할 때 다운로드할 수 없습니다. 홈페이지에 가서 지정한 버전의 Python을 다운로드하여 서버에 전송할 수 있습니다
    tar xf Python-3.5.0.tgz
    cd Python-3.5.0
    ./configure
    make
    sudo make install
    

    설치가 완료되면python3-V를 통해 현재 버전 보기
    (2) 가상 환경 설치
    cd ~
    mkdir venv
    cd venv
    python3 -m venv python3-forcrawl
    source ~/venv/python3-forcrawl/bin/activate
    

    (3) 상응하는python 라이브러리 설치
    pip install requests
    #  
    pip install -r requirements.txt
    

    아리운 서버:

  • 기능: 동적 VPS에서 전송된 IP를 받아들이고 인터페이스를 제공하여 동적 VPS의 실시간 IP & 포트를 되돌려줍니다
  • 도구: 웹 서비스 - tornado
  • 연결: sshroot@ip-p22, 서버 비밀번호를 잊어버리면 실례 로그인 비밀번호와 원격 연결 비밀번호를 재설정할 수 있습니다. 더 많은->비밀번호, 비밀 키
  • Python 환경을 구축하고 tornado를 설치합니다
  • pip install tornado
    
  • redis 데이터베이스
  • sudo yum install -y redis
    #  
    redis-server >> /dev/null 2>&1 &
    #  redis
    redis-cli
    
  • 몬고 데이터베이스(설치하지 않아도 되고 기본적인 에이전트 기능을 실현하려면 이 라이브러리가 필요하지 않음)
  • # yum mongo , 
    vi /etc/yum.repos.d/mongodb-org-3.4.repo
    #  , centos7
    [mongodb-org-3.4]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/3.4/x86_64/
    gpgcheck=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
    #  
    sudo yum install -y mongodb-org
     :
    systemctl start mongod.service
    

    주의점 & 구덩이:
  • ssh 링크 시 Permission denied(publickey, gssapi-keyex, gssapi-with-mic)를 잘못 보고하면 해결 방법:
  • 아리운 웹 터미널을 통해 서버에 로그인하여 ssh 프로필vim/etc/ssh/sshd_ 수정config 변경: PasswordAuthentication no(기본 yes) 또는 열기 설명: PermitRootLogin yes


  • 코드 구현 논리


    1. 클라이언트: 동적 vps
  • Python을 통해 연결 & 다이얼을 끊는 동작을 실행합니다. 성공한 후 공망 IP를 일치하게 획득하고requests 라이브러리를 통해 IP를 서버에 전송합니다
  • 악의적인 방해를 피하기 위해 전송 키를 추가할 수 있습니다. 서버는 전송 키를 검증하고 검증에 실패한 사람은 IP 업데이트를 하지 않습니다
  • IP 교체를 위해 정시 작업을 설정합니다
  • 전송된 데이터에는 IP, 비밀 키,name(vps 서버 구분)이 포함되어 있다

  • 2. 서버: 고정 IP 서버
    tornado를 사용하여 서비스를 시작하고 두 개의 인터페이스를 제공합니다
  • post 인터페이스: 클라이언트가 보낸 IP를 수신하고 비밀 키를 검증한 후name을 키로 하고 ip&port를 val로 하여redis에 저장합니다
  • get 인터페이스:redis에서 ip &port를 꺼내서 되돌려줍니다

  • 프록시 검사기: IP 가용성 검사, 실효 IP 제거

    총결산

  • 에이전트를 직접 구매하는 것보다 가격이 저렴하고 속도가 제한되지 않지만 단점은 vps에서 전화를 걸어 서버로 전송하고 파충류에서 에이전트를 사용하는 데 이 과정이 지연되어 IP를 전환할 때 에이전트를 사용할 수 없게 될 수 있다. 해결 방안은 시간 초과를 설정하고 몇 초 동안 휴면한 후에 다시 시도하는 것이다
  • IP 전환 속도가 매우 빠른 서비스에 적용되지 않는다. 다이얼이 너무 빈번하다. 하나는 IP가 때때로 변하지 않고 다른 하나는 쉽게 다이얼을 걸면 실패한다
  • 만약에 온라인 환경에서 사용한다면 동적 vps를 몇 대 더 사서 IP 탱크를 만들 수 있다
  • 코드 구현:https://github.com/HLFYY/spiders/tree/master/adsl_server
  • 좋은 웹페이지 즐겨찾기