实现动态IP 域名解析

2019-12-16 02:54:20北京王择
网络安全和信息化 2019年12期
关键词:公网桥接脚本

北京 王择

目前的网络环境和需要解决的问题

场景:公司未单独购买专用网络,使用的是非专用网络PPPoE 拨号模式连接互联网,运营商网络使用动态分配方式分配公网IP 地址,导致公网IP 会定期变化(约6-7天会固定变化一次,主动重启拨号路由器或光猫重启掉电后也会触发IP 地址的变化)。光猫运行在路由模式,光猫WAN口获取到公网IP 地址,光猫下联路由器WAN 口获取到的是光猫DHCP 分配的内网地址。

需要解决的问题如下:

第一,光猫需要调整到桥接模式(即让光猫充当一个单纯的光转电模块使用,不启用光猫的路由功能),让路由器WAN 口获取到公网IP方便做端口转发。

第二,公网IP 地址变化后自动修改DNS 解析地址,实现公网IP 变化,域名访问不变的需求。(这个问题最简单解决方案是购买DDNS服务,但服务价格较昂贵,网络转发速度也受到DDNS 服务提供商限制)

为了最大程度的减少开支,我们不采用购买服务的方式去解决第二个问题,以下开始介绍上述两个问题的解决方案,并着重对第二个问题进行详细介绍。

问题1 解决方案

目前光猫的规格比较多,各家运营商提供的型号不尽相同,如果运营商提供了超级管理员密码,可以在光猫的管理页面调整光猫为Bridge 桥接模式并重启光猫,然后自己的路由器就可以进行PPPoE 拨号了。如果运营商提供的光猫管理账户权限不够,没有配置切换的页面,可以联系运营商客服后台进行桥接模式切换,若客服拒绝也可自行处理,处理思路各型号都是一样的,光猫底层架构都是基于Linux 内核开发的,故开启光猫的22 端口后(配置页可找到开关),可以使用ssh 命令去远程连接光猫的网关地址,根据配置文件内容进行分析,找到当前生效的系统配置使用vi 编辑器进行桥接模式的修改。

修改成功后使用自己的路由设备进行拨号,可以看到路由器WAN 口会获取到一个公网IP 地址(非私有地址),可参考私有地址段:

获取的地址不在以上三类私有地址段,就算成功解决了第一个问题。根据运营商的配置,有时候获取到的依然是私有网络地址,在保证光猫桥接状态正常的前提下,需要联系运营商客服进行修改,目前运营商会协助进行动态公网IP 的分配,运行商后台修改后10 分钟左右重启路由器,配置会生效。这里分享的是一个解决思路,具体操作细节会根据光猫型号和网络运营商有略微差异。

以上是使用自有路由器的方案,直接使用光猫的路由功能也可(缺点:路由转发效率受到光猫处理速率的限制),需要在光猫上进行端口转发配置。

问题2 解决方案

1.思路

Linux 虚拟机一台,用于获取公网地址,并调用阿里云域名解析DNS 的API 接口进行修改解析的IP 地址。

2.最终效果

通过域名访问公司云服务,实现网络满速转发的需求。

3.需要准备

(1)阿里云域名一个,并已经配置好了二级域名的解析(使用其他DNS 服务商采购域名也可以,须能够支持调用API 接口修改解析地址,预配置解析到的IP 地址可以随意,只需存在这一条解析即可,后续会调用API 接口修改这个IP 地址)。

(2)Linux 内网主机一台(实体机虚拟机均可)。

(3)Linux 主机网口需直连或通过交换设备连接路由器,路由器WAN 口获取的是公网IP 地址。

4.实现方法

(1)虚拟机安装Centos7系统,安装python。

#yum -y install python

(2)安装pip。

(3)安装阿里云sdk。

(4)使用以下代码调用阿里云API 接口。

为保证后续更新替换IP 地址,按照本示例配置需保证13 行为request.set_Value("")

在/home/ip/ 目录下新建名为ch_dns.py 的python脚本并编辑以下内容(需修改“<>”括起的变量)

Python 示例脚本,如图1所示:

python 代码需要修改的地方:

①access Key ID、accessSecret 从阿里云控制台创建,进入阿里云控制台管理页,鼠标放到右上角个人头像,可以看到accesskeys 按钮,点击进行配置。

图1 调用阿里云API 接口脚本

图2 获取本机公网IP 脚本

②RecordId 号可以进入API 接口测试网址进行查询,可参考https://api.aliyun.com。

在OPENAPI模拟调用页面中,搜索字段DescribeDomainRecords,输入必填项DomainName 字段(二级子域名名称),点击调用接口按钮,在右侧API接口返回值中可以获取到RecordId 号(一个二级域名对应唯一的DNS 记录ID 号)。

③Value 字段是当前公网IP 地址,需要动态修改,需要另一个shell 脚本进行修改(下面会介绍)。

注意:替换后的变量均以英文字符单引号或双引号引起,无需再输入两边的尖括号,单引双引格式请参考实例Python 脚本。

5.本机获取公网IP 地址,然后使用shell 脚本sed命令替换ch_dns.py 脚本的Value 地址字段行:

此脚本作用是获取当前主机的公网地址,并赋给变量IP,然后使用sed -i 命令将当前获取的新公网IP 替换python 脚本中的旧IP 地址。其中13c 代表ch_dns.py 的 第13 行,可 用vi 编辑器打开ch_dns.py 脚本,使用:set number 命令查看request.set_Value("")所处行号,shell 脚本中的行号需要与python 脚本中行号对应。

给shell 赋予执行权限:

6.依次手动执行sh/home/ip/get_ip.sh 和python/home/ip/ch_dns.py,观察有无报错。

7.将以上两个脚本加入Linux 定时任务,如图3 所示。

8.登录阿里云后台,检查解析状态是否正常,并在任意电脑使用命令ping 域名地址进行测试,看是否解析到路由器获取的公网IP地址。

图3 定时任务配置

9.路由器根据内部服务器访问端口做好外部端口的端口转发。

10.使用任意一台电脑telnet 域名<空格>外部端口号,如果可通则配置完成。

说在最后,本篇文章介绍的方案主要是在非固定IP的非专用网络环境下,为了提升公司内部运维的服务水平,方便搭建公司内部使用的网站或云平台(非常不建议对外部人员搭建重要服务使用),但因价格低廉,非专用网络单根光纤接入连接数是有限的,一般1000-2000个连接数左右,因此达到限制后可能会出现网络不稳定。

如果公司人数在50-100人的情况下,建议网络接入使用双线路接入做负载的形式实现,同时对单个用户的连接数做好限制,正常办公情况一个用户连接数约为40条左右,故可参考限制单IP最大连接数为60。

另外,我们可以使用本方案在自己家中搭建属于自己运维的工具平台,将运维常用的文件保存在自己的云平台中,在任何地方都可以查找到自己的资料或者工具进行查看下载,可以大大提升我们的运维能力和服务质量。

这种方案,对于个人或小型初创公司来说可以大大节约网络支出经费。当然,大于100 人的大公司还是要首选商用专线接入(不限制网络连接数),一切运维服务的准则还是要保证基础设施和网络的稳定作为前提条件。

以上方案是笔者多次调试得出的干货,目前云盘已经投入使用,解决了公司同事从外部网络环境在线查看、修改、下载公司内网保存的资料需求,后期还有其他云服务工具可以逐一上线使用,通过这篇文章把经验分享给大家,把我们手里的动态IP 充分使用起来,使它成为我们运维的一个好帮手吧!

猜你喜欢
公网桥接脚本
酒驾
浅析大临铁路公网覆盖方案
中国新通信(2022年4期)2022-04-23 23:04:20
Microchip推出首款车载以太网音视频桥接(AVB)全集成解决方案
汽车零部件(2021年4期)2021-04-29 01:47:10
安奇奇与小cool 龙(第二回)
公网铁路应急通信质量提升的技术应用
数据库系统shell脚本应用
电子测试(2018年14期)2018-09-26 06:04:24
快乐假期
中学生(2017年19期)2017-09-03 10:39:07
基于公网短信的河北省高速公路数据传输应用
苹果腐烂病树桥接复壮技术
双静脉皮瓣桥接移植修复手指腹皮肤缺损