一、用到的设备:juniper防火墙、linux服务器、花生壳。linux
二、拓扑图
shell
三、配置步骤数据库
网络上主机与主机之间通讯,是根据ip地址来寻找对方。而内网环境基本上都是私有地址,因此咱们正常状况下没法访问内网的主机。就算咱们知道Juniper出口的ip地址,只要Juniper从新拨号,那么这个Ip地址就会改变,可是咱们又必需要用到ip地址。这时,咱们就要用到“花生壳”了。购买一个域名,每当Juniper从新拨号后,它都能解析光纤最新的ip地址。而后,再利用防火墙的转发规则,咱们就能够实现从内网访问外网。
vim
假设我有一个域名“cninsure-2011.gicp.net“ ,本例中,我最终的目录是访问内网的数据库服务器,通常状况下,直接访问数据库服务器不太安全,这时,咱们能够利用Linux服务器自带的iptables 对端口进行转发,譬如说我在家访问33669号端口,当数据包通过Juniper防火墙到达192.168.1.50后,根据iptables的规则,只要数据包的目的端口是33669,就将该包转发到192.168.1.228的3306号上,而数据库的经常使用端口就是3306,从而在外网访问数据库。安全
a、在Juniper防火墙上添加策略,放行目的端口是33669的数据包。以下图所示服务器
登陆Juniper的控制端,左边Policy---->Service---->Custom,而后点右上角的New按钮,打开新建页面。建立一个Policy:wai_nei tcp协议,端口是33669.
网络
而后左边Policy---->Policies, 右上角的New按钮,新建协议。
tcp
这里说明下,这里面的配置是同事配好的,我作的时候,只改了Name和Service这两个地方。配好以上三步后,在去Policies下面查看下,看是否启用了。这几步是新建策略并添加到防火墙上运行。
测试
接下来是配置防火墙的转发规则,Juniper和Linux 都要配。首先是Juniper的转发。Juniper的转发有两种方式分别为MIP和VIP,本例中我用的是VIP。由于域名会解析到二号拨号光纤。因此接下来就是配置数据包从二号光纤的转发规则。左边Network---->Interface---->ethernet0/2-Edit---->选择VIP---->点右上角的New按钮。进入新建页面。
spa
Virtual IP:Juniper会自动捕捉。
Virtual Port:你要放行的端口,这里写33669
Map to Service:这里选择以前咱们建立的wai_nei 。
Map to IP :将要转发给那台服务器,这里咱们填写192.168.1.50.
以上Juniper上的规则就已经配置完成了。
接下来就是配置192.168.1.50上Iptables的转发规则。
打开192.168.1.50这台服务器对数据包的转发功能,vim /etc/sysctl.conf 设置这项 net.ipv4.ip_forward = 1 保存退出,而打开iptables 并设置以下规则。
咱们分析下,当数据包从Juniper转发到192.168.1.50上时,此时数据包源地址是Juniper的内网地址,而目的地址是192.168.1.50。而目的端口是33669。而咱们最终的目的是访问192.168.1.228的3306号端口,故此根据33669号端口,咱们要把该包转发到192.168.1.228这台服务器上。数据包进入192.168.1.50前咱们要修改他的目的地址
iptables -t nat -A PREROUTING -d 192.168.1.50 -p tcp -m tcp --dport 33669 -j DNAT --to-destination 192.168.1.228:3306
根据iptables的转发规则,接下来是filter表的FORWARD链对数据包转发。
iptables -P FORWARD ACCEPT ---直接设置FORWARD的默认转发规则是ACCEPT。
此时数据包就到的nat表的POSTROUTING链,这时咱们要修改数据包的源地址。
iptables -t nat -A POSTROUTING -d 192.168.1.228 -p tcp -m tcp --dport 3306 -j SNAT --to-source 192.168.1.50
通过转发后的数据包源ip 192.168.1.50 目的ip192.168.1.228,目的端口是3306。这样包到达192.168.1.228服务器,服务器一看,这时内网的兄弟机器访问我,而后就接受这个数据包并回传数据,至此通讯完成。而咱们的目的也就达到。
四、测试