一、用到的設備: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服務器,服務器一看,這時內網的兄弟機器訪問我,而後就接受這個數據包並回傳數據,至此通訊完成。而咱們的目的也就達到。
四、測試