1、用到的设备:juniper防火墙、linux服务器、花生壳。
2、拓扑图
3、配置步骤
网络上主机与主机之间通信,是根据ip地址来寻找对方。而内网环境基本上都是私有地址,所以我们正常情况下无法访问内网的主机。就算我们知道Juniper出口的ip地址,只要Juniper重新拨号,那么这个Ip地址就会改变,但是我们又必须要用到ip地址。这时,我们就要用到“花生壳”了。购买一个域名,每当Juniper重新拨号后,它都能解析光纤最新的ip地址。然后,再利用防火墙的转发规则,我们就可以实现从内网访问外网。
假设我有一个域名“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按钮,新建协议。
这里说明下,这里面的配置是同事配好的,我做的时候,只改了Name和Service这两个地方。配好以上三步后,在去Policies下面查看下,看是否启用了。这几步是新建策略并添加到防火墙上运行。
接下来是配置防火墙的转发规则,Juniper和Linux 都要配。首先是Juniper的转发。Juniper的转发有两种方式分别为MIP和VIP,本例中我用的是VIP。因为域名会解析到二号拨号光纤。所以接下来就是配置数据包从二号光纤的转发规则。左边Network---->Interface---->ethernet0/2-Edit---->选择VIP---->点右上角的New按钮。进入新建页面。
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服务器,服务器一看,这时内网的兄弟机器访问我,然后就接受这个数据包并回传数据,至此通信完成。而我们的目的也就达到。
4、测试
来源:oschina
链接:https://my.oschina.net/u/2322690/blog/466052