将之前写过的一个小工具做了一些优化,开源出来。起了个没有任何意义的ppter。
任性,没有意义,听着挺好听,嗯就这样。
项目地址: https://github.com/windanchaos/ppter
多地办公,没有固定IP,需办公区对办公区建立VPN,办公区和阿里云建立VPN的场景。
能节省的费用就是两条固定IP的费用。拒我了解的一个固定IP的电信一年30万左右,移动的要10来万。对于小公司来说,一年还是能节约不少钱了。
市面上的其他解决方案,我并不太清楚,如果有更优的免费方案,欢迎告知。
使用独立于办公区内部环境的阿里云(或其他共有云),部署redis作为ip交换媒介。
具体参考下文。
其中user是可以操作docker的普通账户,换成自己的即可
bash installDocker.sh user
# 镜像打包
docker build -t dns_monitor .
# 启动容器进程
docker run -it -d -v `pwd`/config.ini:/root/config.ini --name monitor dns_monitor
使用的python3。
sudo pip3 install redis request configparser base64
不同环境独立执行:
nohup python3 Jobs.py > log.log &
程序会做以下动作:
config.ini的文件内容,大部分顾名思义。
需要配置具有阿里云vps 、dns操作权限的id和secret。
[dns] 下的domain设置
其中RR标识map.baidu.com 中的map。
如何获取domain的recordId和RR(主机记录)?
python3 getDnsInfo.py
执行后会打印‘baidu.com’的所有解析信息。复制粘贴到json在线解析,找到需要的解析信息。
如果要换域名就修改getDnsInfo.py的内容。
前三个参数是路由器的登录地址和账户密码。
redisLocalVpnName 是redis中IP地址的本地标识。
redisRemoteVpnName 是vpn连接远端的标识。
A、B环境的名字需要互换。
A环境的配置:
redisLocalVpnName = A
redisRemoteVpnName = B
B环境的配置:
redisLocalVpnName = B
redisRemoteVpnName = A
vpn 的配置数据这里没有做到配置文件中,在updata_vpn.py中修改vpn_data,默认vpn-config[0]是对阿里云的vpn设置。vpn-config[1:]之后的是本地对本地的设置。
这类数据可能不同路由器,值是不一样的。需要自己去抓包了解一下了。
不同环境名字区别开即可。
详细的配置在update_vps.py中,主要修改CreateVpnConnection参数。
CreateVpnConnection = {'Action': 'CreateVpnConnection', 'RegionId': 'cn-hangzhou',
'VpnGatewayId': 'XXXXXXX', \
'LocalSubnet': '172.16.128.0/20', 'RemoteSubnet': '10.189.51.0/24',
'IpsecConfig':str({'IpsecAuthAlg':'sha1'}),
'IkeConfig': str({'Psk': 'XXXXXXX','IkeAuthAlg': 'sha1'}), 'CustomerGatewayId': '', 'Name': ''}
网关的名字是设置的name取第二个字符(不含)之后的字符,比如现在name为tohzh,则对应网关名hzh。
Psk 要设置成自己定义的值。
特别注意,用户网关如果没有和ipsce关联,就不要提前设置,否则无法新建。
1、requests类库是个优秀的开发语言级别的“浏览器”库,基本上不用费神去操作cookies之类的,畅快的request就好;
2、程序持续运行,异常抛出后继续运行的机制设置对程序进程稳定性很重要,异常抛出一般接不住就用所有异常类父类:BaseException
3、学会了一项新的技能,在服务器上控制台上做调试。可参考这篇文章。
python3 -m pdb test.py
如果要简单说,下面wsn三个我用了比较实用。我在码代码过程中,遇到一个问题,始终不知道为什么在服务器上运行失败,而本地是ok的。调试后发现是配置文件没有换(服务器上是请求url有单引号,解析不出来)
w:(where)打印当前执行堆栈
s:(step)执行下一条命令
n:(next)执行下一条语句
4、docker是个好东西
5、扒拉一个系统的运行过程,才能结合自己的需求去做优化和修改。