注意: IP代理精灵仅提供国内ip网络节点,不提供境外网络节点,不能用于任何非法用途或访问境外封闭网站,不能跨境联网,只能用于合法的国内网络加速。

请登录 注册

首页 > 新闻资讯 > 如何使用Linux系统的动态VPS自动更换IP

如何使用Linux系统的动态VPS自动更换IP

来源:IP代理精灵 作者:admin 时间:2019-06-05 11:30:03

互联网上一些项目也越来越受欢迎,但是一般的项目都是要求真实的IP,所以要想获得大量的真实ip,一种动态VPS就诞生了,动态VPS采用PPTP或者ADSL拨号的方式获取动态IP,不仅可以做到获取区域性IP,还可以混拨,也就是可以获取全国各地的IP地址,这样对于网上业务来说就非常好了,轻松模拟出来各种地区IP,达到目的。

如何使用Linux系统的动态VPS自动更换IP

笔者最近接到一单,编写自动化拨号脚本,自动切换动态VPS的外网IP实现自动化,今天就记录下动态VPS的配置以及使用的姿势。


机器


先看下机器的配置,客户给过来的机器,配置如下:


系统:Linux


内存:512M


CPU:单核


硬盘:10G


带宽:2M


由于客户一次性给过来的机器比较多,100多台VPS,配置大体上都差不多,但是各个机器之间的差距很大,比如有的机器只有一个网卡,有的机器有好几张网卡,有的机器装的是Centos 6有的是Centos7,有的已经配置好拨号程序了,有的啥也没有等等各种情况都存在。


配置


既然是要实现自动化拨号程序,自然是要先判断下拨号程序在不在,Linux的拨号程序使用的是 pppoe-start 命令,注意,在不同的Linux里面拨号程序可能不一样,有的版本使用的是adsl-start命令,我这里首先查看下系统的发行版本,使用如下命令


[root@localhost ——]# cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core)


看到返回了发行版本是centos 7.1,非常好,系统版本比较新,对脚本的支持也会更友好。


拨号命令pppoe-start在系统中已经自带了,所以这里咱们直接使用pppoe-setup设置我们的adsl拨号账号和密码,执行pppoe-setup命令后终端返回如下提示


Welcome to the PPPoE client setup.  First, I will run some checks on


your system to make sure the PPPoE client is installed properly...


LOGIN NAME


Enter your Login Name (default root):


如果是第一次设置拨号会提示上面那种,如果之前有设置过,会提示是否覆盖之前的记录。


这里需要输入adsl账号,输入完之后回车,终端提示如下


INTERFACE


Enter the Ethernet interface connected to the PPPoE modem


For Solaris, this is likely to be something like /dev/hme0.


For Linux, it will be ethX, where 'X' is a number.


(default eth0):


询问pppoe拨号使用的网卡是哪个,当前这台机器只有一个网卡,所以选择默认的就行,后面再说多网卡的情况。


输入回车自动选择默认网卡后终端返回如下提示


Do you want the link to come up on demand, or stay up continuously?


If you want it to come up on demand, enter the idle time in seconds


after which the link should be dropped.  If you want the link to


stay up permanently, enter 'no' (two letters, lower-case.)


NOTE: Demand-activated links do not interact well with dynamic IP


addresses.  You may have some problems with demand-activated links.


Enter the demand value (default no):


这个提示意思是询问是按需链接还是始终保持连接,这个选项咱们在路由器的拨号设置里面经常看到,一般选择始终连接,这里系统默认选择始终连接,所以直接回车就好。


接着提示是否需要设置DNS


DNS


Please enter the IP address of your ISP's primary DNS server.


If your ISP claims that 'the server will provide dynamic DNS addresses',


enter 'server' (all lower-case) here.


If you just press enter, I will assume you know what you are


doing and not modify your DNS setup.


Enter the DNS information here:


这里咱们就不需要设置DNS了,使用自动获取DNS即可,直接回车,之后提示输入adsl的密码


PASSWORD


Please enter your Password:


和再次输入密码


Please re-enter your Password:


然后会提示是否允许其他用户连接


USERCTRL


Please enter 'yes' (three letters, lower-case.) if you want to allow


normal user to start or stop DSL connection (default yes):


这里咱们不需要其他用户连接,所以输入no回车,接着提示防火墙设置


FIREWALLING


Please choose the firewall rules to use.  Note that these rules are


very basic.  You are strongly encouraged to use a more sophisticated


firewall setup; however, these will provide basic security.  If you


are running any servers on your machine, you must choose 'NONE' andset up firewalling yourself.  Otherwise, the firewall rules will deny


access to all standard servers like Web, e-mail, ftp, etc.  If you


are using SSH, the rules will block outgoing SSH connections whichallocate a privileged source port.


The firewall choices are:


0 - NONE: This script will not set any firewall rules.  You are responsible          for ensuring the security of your machine.  You are STRONGLY


recommended to use some kind of firewall rules.


1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation


2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway                for a LAN


Choose a type of firewall (0-2):


这里有三个选项,具体含义不多说,这里咱们不需要设置防火墙,输入0回车。


系统询问是否需要开机启动自动连接


Start this connection at boot time


Do you want to start this connection at boot time?


Please enter no or yes (default no):


输入yes回车设置成开机自动连接,最后系统展示刚刚的设置以及询问是否生成配置文件


** Summary of what you entered **


Ethernet Interface: eth0


User name:          adsluser


Activate-on-demand: No


DNS:                Do not adjust


Firewalling:        NONE


User Control:       no


Accept these settings and adjust configuration files (y/n)?


输入y后回车整个adsl拨号就设置完成了,系统会给出一个提示


Adjusting /etc/sysconfig/network-scripts/ifcfg-ppp0


Adjusting /etc/ppp/chap-secrets and /etc/ppp/pap-secrets


(But first backing it up to /etc/ppp/chap-secrets.bak)


(But first backing it up to /etc/ppp/pap-secrets.bak)


Congratulations, it should be all set up!


Type '/sbin/ifup ppp0' to bring up your xDSL link and '/sbin/ifdown ppp0'to bring it down.


Type '/sbin/pppoe-status /etc/sysconfig/network-scripts/ifcfg-ppp0'to see the link status.


提示中写明了配置文件的位置以及基本的使用方法。


在整个拨号过程中咱们能用到的命令差不多只有三个,pppoe-start、pppoe-stop、pppoe-status,pppoe-status命令是查询adsl拨号的状态,自动化脚本需要通过这个命令查询是否拨号成功。


配置完成之后咱们就来测试下拨号是否成功,直接执行pppoe-start命令,稍等几秒钟,如果没有报错继续执行pppoe-status命令查询下是否拨号成功。


我这里系统返回如下


pppoe-status: Link is up and running on interface ppp0


3: ppp0:mtu 1480 qdisc pfifo_fast state UNKNOWN qlen 3


link/ppp


inet 10.2.115.19 peer 10.2.254.254/32 scope global ppp0


valid_lft forever preferred_lft forever


能正常获取到ip地址则为拨号成功,但是我这里的ip地址很明显是个内网地址,尝试ping baidu.com看下能不能连上外网,发现并不能连接外网


ping: unknown host www.baidu.com


问题


既然无法连接外网,那肯定是有问题了,先去看下拨号的配置文件


[root@localhost ——]# cat /etc/ppp/pap-secrets# Secrets for authentication using PAP# clientserversecretIP addresses"adsluser"*"123456"[root@localhost ——]# cat /etc/ppp/chap-secrets# Secrets for authentication using CHAP# clientserversecretIP addresses"adsluser"*"123456"


确认了adsl账号密码没有问题,执行ifconfig。系统返回如下


eth0: flags=4163  mtu 1500


inet 192.168.14.40  netmask 255.255.255.0  broadcast 192.168.14.255


inet6 fe80::215:5dff:fe32:ce6b  prefixlen 64  scopeid 0x20


ether 00:15:5d:32:ce:6b  txqueuelen 1000  (Ethernet)


RX packets 30860  bytes 4216610 (4.0 MiB)


RX errors 0  dropped 10  overruns 0  frame 0


TX packets 321  bytes 24455 (23.8 KiB)


TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


lo: flags=73  mtu 65536


inet 127.0.0.1  netmask 255.0.0.0


inet6 ::1  prefixlen 128  scopeid 0x10


loop  txqueuelen 0  (Local Loopback)


RX packets 18  bytes 1778 (1.7 KiB)


RX errors 0  dropped 0  overruns 0  frame 0


TX packets 18  bytes 1778 (1.7 KiB)


TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


ppp0: flags=4305  mtu 1480


inet 10.2.134.26  netmask 255.255.255.255  destination 10.2.254.254


ppp  txqueuelen 3  (Point-to-Point Protocol)


RX packets 10  bytes 102 (102.0 B)


RX errors 0  dropped 0  overruns 0  frame 0


TX packets 8  bytes 59 (59.0 B)


TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


确认pppoe拨号是正常的,但是ip却显示内网ip,这个时候就要判断数据包走的是哪个接口了,eth0是直接连接到内网的网关,ppp0是连接的外网,如果数据包一直走内网,自然是不通的,怎么判断数据包走的哪个接口呢?使用route命令查看默认的路由表,系统返回


[root@localhost ——]# routeKernel IP routing table


Destination     Gateway         Genmask         Flags Metric Ref    Use Iface


default         192.168.14.234  0.0.0.0         UG    100    0        0 eth0


10.2.254.254    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0


192.168.14.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0


显示默认网关是192.168.14.234,明显走的是内网,这样数据包肯定是出不去的,所以需要修改一下接口设置,使用vi编辑下eth0接口的配置,系统返回


UUID=d1440e96-0020-4ceb-9407-a722fecb96de


DEVICE=eth0


BOOTPROTO=none


ONBOOT=yes


TYPE=Ethernet


DEFROUTE=yes


IPV6INIT=yes


IPV4_FAILURE_FATAL=no


PEERDNS=yes


NAME=eth0


IPADDR=192.168.14.40


NETMASK=255.255.255.0


GATEWAY=192.168.14.234


DNS1=8.8.8.8


DNS2=4.4.4.4


可以看到 DEFROUTE=yes 这里设置成了默认路由,我将这里修改成no,保存然后修改ppp0接口的设置,系统返回


USERCTL=no


BOOTPROTO=dialup


NAME=DSLppp0


DEVICE=ppp0


TYPE=xDSL


ONBOOT=yes


PIDFILE=/var/run/pppoe-adsl.pid


FIREWALL=NONE


PING=.


PPPOE_TIMEOUT=80


LCP_FAILURE=3


LCP_INTERVAL=20


CLAMPMSS=1412


CONNECT_POLL=6


CONNECT_TIMEOUT=60


DEFROUTE=yes


SYNCHRONOUS=no


ETH=eth0


PROVIDER=DSLppp0


USER=adsluser


PEERDNS=no


DEMAND=no


这里的DEFROUTE选项已经设置为yes了,所以不需要修改,重启系统或者重启网卡后再次执行route命令,返回如下


[root@localhost ——]# routeKernel IP routing table


Destination     Gateway         Genmask         Flags Metric Ref    Use Iface


default         0.0.0.0         0.0.0.0         U     0      0        0 ppp0


10.2.254.254    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0


192.168.14.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0


默认接口已经修改成了ppp0,尝试ping www.baidu.com已经可以正常ping通


[root@localhost ——]# ping www.baidu.comPING www.a.shifen.com (103.235.46.39) 56(84) bytes of data.


64 bytes from 103.235.46.39: icmp_seq=1 ttl=48 time=207 ms


64 bytes from 103.235.46.39: icmp_seq=2 ttl=48 time=214 ms


64 bytes from 103.235.46.39: icmp_seq=3 ttl=48 time=205 ms


64 bytes from 103.235.46.39: icmp_seq=4 ttl=48 time=205 ms


64 bytes from 103.235.46.39: icmp_seq=5 ttl=48 time=204 ms


64 bytes from 103.235.46.39: icmp_seq=7 ttl=48 time=203 ms


64 bytes from 103.235.46.39: icmp_seq=9 ttl=48 time=209 ms


64 bytes from 103.235.46.39: icmp_seq=10 ttl=48 time=202 ms


64 bytes from 103.235.46.39: icmp_seq=11 ttl=48 time=202 ms


64 bytes from 103.235.46.39: icmp_seq=12 ttl=48 time=202 ms


(PS:这个延迟我要给跪了)


如果觉得丢包严重或者网络不顺畅,可以尝试修改DNS为电信的114.114.114.114


至此,服务器已经能够正常的拨号连接外网了,接下来就是编写自动化换ip的脚本。


脚本


自动拨号的脚本写起来就很容易了,主要还是用到了subprocess这个库,用来执行系统的命令,下面贴出来代码


#!/usr/bin/env python# coding=utf-8# code by 92ez.comimport subprocessimport timeimport sysimport re


reload(sys)


sys.setdefaultencoding('utf8')def change_ip_for_vps():


try:


subprocess.Popen('pppoe-stop', shell=True, stdout=subprocess.PIPE)


time.sleep(5)


subprocess.Popen('pppoe-start', shell=True, stdout=subprocess.PIPE)


time.sleep(5)


pppoe_restart = subprocess.Popen('pppoe-status', shell=True, stdout=subprocess.PIPE)


pppoe_restart.wait()


pppoe_log = pppoe_restart.communicate()[0]


adsl_ip = re.findall(r'inet (.+?) peer ', pppoe_log)[0]        print '[*] New ip address : ' + adsl_ip        return True


except Exception, e:        print e


change_ip_for_vps()if __name__ == '__main__':


count = 1


while True:        print '[*] 第%s次拨号' % str(count)


change_ip_for_vps()


count += 1


测试代码里面用到了一些sleep来做延迟,实际操作中适当调整sleep的值来达到最优的效果。


效果


使用之前当然是要具备Python环境,循环拨号测试


注意


这里有几点需要额外注意:


第一次登录进去需要安装的软件还挺多,下面列出一下最基本的软件包:


如果你对vi不够熟的话最好安装下vim 使用 yum install vim -y 命令


当然,wget也是必备的软件,使用 yum install wget -y 命令


python升级到最新版本 yum install python-devel -y


最新资讯

推荐阅读

  1. 06

    2020-03

    解析代理服务器的工作原理?

    解析代理服务器的工作原理?在互联网的时代,想必大家都有接触过代理服务器,但很多人都不太清楚它到底是如何进行运作的,首先,我们要搞清楚“代理”的基本原理。

  2. 16

    2021-02

    网络投票用哪款代理IP比较好

    网络投票用哪款代理IP比较好?说起网络投票,大家都不陌生,经常上网的人总有被人拉来投票的经历,不管是群里还是朋友圈,还是私聊喊投票。每次有投票活动,就是各种拉票,结果票数还是

  3. 07

    2019-11

    ip代理精灵工程师带你了解网站的反爬虫策略

    ip代理精灵工程师带你了解网站的反爬虫策略!自有网络以来,就一直存在爬虫和反爬虫,越是大网站,越是成熟的网站,其反爬虫机制越完善,最初的IP限制,验证码限制,还有其他的限制,今

  4. 08

    2019-11

    IP代理和http代理的区别

    IP代理和http代理的区别!我们都知道,IP代理和http代理都可以更换IP,那么IP代理和http代理有什么区别呢?今天ip代理精灵为大家详细介绍一下。

  5. 05

    2019-12

    代理服务器的含义及工作原理

    代理服务器的含义及工作原理!什么代理服务器?代理服务器是向库用户提供对库资源的远程认证的标准方法。一些常见的代理商这里就不说了。这种类似也是BrowZine配对服务,其工作原理类似的

  6. 15

    2019-04

    使用换IP软件的代理IP速度缓慢的原因

    应该不少朋友都用过换IP软件,无论是因为销售业务需求量还是个人需求,在使用换IP软件的操作过程中常会遇到某些令人烦闷至极的难题,例如代理IP连接不了,又如经厉了千难万险好不容易连