将ADSL线路的动态IP实时应用于Linux的iptables和Win2k8的firewall防火墙

### 背景 ###
办公区或家里的上网线路不是专线(专线好贵啊),没有固定的公网IP,而服务器的某些网络服务不便对公网开放,仅想征对办公区或家里的线路开放。

### 思路简介 ###
办公区每条ADSL线路下(实际上现在都是光纤接入,只是服务近似于以往的ADSL)准备一台不需要关机的服务器,通过计划任务配置curl客户端基于验证去不断请求一个URL,公网IP就送到了web服务的日志中去了,
公网环境下准备一台linux服务器,搭建web服务(推荐nginx),通过一个脚本定期去web服务的日志中获得可信任的最新的办公区IP,提供基于验证的http服务,公网上可下载到该IP,
应用动态IP到防火墙的服务器,始终通过定制的脚本配置防火墙所有规则(应该养成通过脚本配置防火墙的习惯,如果再通过手动修改防火墙将可能导致配置丢失或冲突),并且跑一个计划任务来获取最新的IP,有变更时,便应用到本地防火墙指定的策略中。
该方案我们简称为dip方案吧,于是下文便有名称:dip客户端,dip服务端,dip应用端。
dip方案示意图

### 实践效果 ###
实践了六年以上,未依赖第三方(花生壳等)DDNS服务,可靠性、可控性非常好。

### 实施细节参考 ###
dip客户端配置
办公区的linux服务器,建自动任务于/etc/crontab
* * * * * root curl -u dip:pass –retry 3 –retry-delay 1 –connect-timeout 7 –max-time 5 http://dip.zhaoyanan.cn:83/uploadip_office01.txt > /dev/null 2>&1
运行该任务的办公区服务器,和员工PC机访问的目标服务器,应该在同一条上网线路下,假如有多条线路,那么建议使用多台服务器或者在核心路由(比如RouterOS)实现,
使用多台服务器时,为方便脚本统一实现最终目的,访问目标URL可以按下面的规律配置:

http://dip.zhaoyanan.cn:83/uploadip_office01.txt

http://dip.zhaoyanan.cn:83/uploadip_office02.txt

http://dip.zhaoyanan.cn:83/uploadip_office03.txt

其中RouterOS可通过自带脚本功能,使用fetch命令访问具有不同的目标端口的URL来区分ADSL线路,可自行研究。

dip服务端配置
nginx配置示例

生成/opt/nginx/conf/dip-htpasswd的方法:
python /root/sh/htpasswd.py -c -b /opt/nginx/conf/dip-htpasswd user pass

htpasswd.py脚本内容

建自动任务于/etc/crontab
* * * * * root /root/sh/dip.sh do >> /root/sh/dip.log 2>&1; sleep 30; /root/sh/dip.sh do >> /root/sh/dip.log 2>&1

/root/sh/dip.sh脚本运行前,先创建文件:
echo 1.1.1.1 > /opt/web/dip/downloadip_office01.txt
echo uploadip_office01 > /opt/web/dip/uploadip_office01.txt
echo 1.1.1.1 > /opt/web/dip/downloadip_office02.txt
echo uploadip_office02 > /opt/web/dip/uploadip_office02.txt
downloadip文件首先不能为空,所以先随便输入一个IP到文件中。

/root/sh/dip.sh脚本内容:
(脚本发邮件功能需要mutt支持,如果不需要发邮件通知,可以去掉该功能)

dip应用服务器linux配置
linux防火墙iptables主脚本

linux防火墙iptables动态策略脚本

/root/sh/iptables_dynamicoffice01.sh示例:
一条线路一个脚本,/root/sh/iptables_dynamicoffice02.sh内容一样,只需要改location_name的值为office02

配置计划任务于/etc/crontab:
* * * * * root /root/sh/iptables_dynamicoffice01.sh >> /root/sh/iptables_dynamicoffice01.log 2>&1
* * * * * root /root/sh/iptables_dynamicoffice02.sh >> /root/sh/iptables_dynamicoffice02.log 2>&1

dip应用服务器win2k8配置
win2k8时间格式配置

注意:脚本用到了date命令,需要修改系统控制面板中的“区域和语言”–》“格式”,变更格式M为MM,H为HH,以保证输出的年月日的数字个数总是相同的。
例如:
win2k8_datetime_config

win2k8防火墙firewall主脚本内容
注意:把IP替换为自已的IP,
脚本用到了curl.exe命令,需要把windows下可运行的curl.exe拷贝到脚本所在目录,

win2k8防火墙firewall动态策略脚本

配置计划任务到win2k8系统中,每分钟跑一次firewall_dynamic.bat。

楼主干得不错,打赏!

Share

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">