一.概述:
在實際工作中可能會出現,在兩個不同區域的兩台linux能夠互相通訊,同時希望中間防火牆放行盡量少的政策,能通過對方linux主機作為跳闆通路對方linux能夠通路的資源,用vmware和GNS3搭建環境測試了一下,通過GRE隧道和PAT可以實作,現記錄下來。(這種方式有背于安全域的思想,在實際工作中除非不得已還是建議少用)
二.基本思路:
A.為了展現效果,隻是添加主機路由
----linux1和linux2通過添加對方的主機路由,建立GRE隧道
----linux1通路R2也隻是添加主機路由,讓其走GRE隧道
B.在linux2上需要配置PAT,将源位址為linux1的tunnel接口位址的做源位址隐藏,否則對方沒有linux1的tunnel接口位址的回程路由
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.1.1/32 -j MASQUERADE
C.如果linux1同網段其他主機需要通過使用這條GRE,需要三個條件:
①linux1開啟了路由轉發
②linux1側主機配置了到linux2側網絡的路由,指向linux1(否則流量不會都linux1與linux2直接建立好的GRE隧道)
③linux2上需要配置PAT,将源位址為linux1側的主機或網絡位址做源位址隐藏
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.0/24 -j MASQUERADE
D.通過上述配置完成後,隻需linux1和linux2之間放行GRE流量的一條政策,内網的其他訪基于TCP/UDP的點到點的通路都暢通無阻
---防火牆放通的不是TCP,也不是UDP,而是GRE,像checkpoint防火牆的service就内置有GRE
---如果隻是放通linux1到linux2的GRE流量測量,實際測試,需要linux1先ping linux2的tunnel位址,linux2再ping linux1的tunnel位址,隧道才能建立
E.GRE隧道建立後,用Redhat 6.5測試,過兩個小時沒有自動斷開
三.測試拓撲:
<a href="http://blog.51cto.com/attachment/201309/105927414.jpg" target="_blank"></a>
四.配置步驟:
A.配置GRE:
----參見之前的博文:http://333234.blog.51cto.com/323234/931805
①添加主機路由:
[root@linux1 ~]# route add –host 192.168.20.1 gw 192.168.10.10
[root@linux2 ~]# route add –host 192.168.10.1 gw 192.168.20.10
②确定是否加載了GRE子產品:
[root@Linux1 ~]# lsmod |grep ip_gre
[root@Linux2 ~]# lsmod |grep ip_gre
----指令運作沒有傳回結果,說明沒有加載
③加載GRE子產品:
[root@linux1 ~]# uname -an
Linux linux1 2.6.9-78.EL #1 Wed Jul 9 15:27:01 EDT 2008 i686 i686 i386 GNU/Linux
[root@linux1 ~]# insmod /lib/modules/2.6.9-78.EL/kernel/net/ipv4/ip_gre.ko
[root@linux2 ~]# uname -an
Linux linux2 2.6.18-164.el5 #1 SMP Thu Sep 3 03:33:56 EDT 2009 i686 i686 i386 GNU/Linux
[root@linux2 ~]# insmod /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ip_gre.ko
----根據核心版本,選擇正确的子產品
④配置GRE tunnel接口:
[root@linux1 ~]# ip tunnel add tunnel0 mode gre remote 192.168.20.1 local 192.168.10.1 ttl 255
[root@linux1 ~]# ip link set tunnel0 up mtu 1400
[root@linux1 ~]# ip addr add 172.16.1.1/30 dev tunnel0
[root@linux1 ~]# ip addr add 172.16.1.1/30 peer 172.16.1.2/30 dev tunnel0
[root@linux1 ~]# ip route add 192.168.20.2/32 dev tunnel0
----添加到需要通路的主機路由,根據實際需要,也可以添加網段
[root@linux2 ~]# ip tunnel add tunnel0 mode gre remote 192.168.10.1 local 192.168.20.1 ttl 255
[root@linux2 ~]# ip link set tunnel0 up mtu 1400
[root@linux2 ~]# ip addr add 172.16.1.2/30 dev tunnel0
[root@linux2 ~]# ip addr add 172.16.1.2/30 peer 172.16.1.1/30 dev tunnel0
⑤配置tunnel接口開機啟動:
linux1:
vi /etc/init.d/gre.sh ##内容如下:
insmod /lib/modules/2.6.9-78.EL/kernel/net/ipv4/ip_gre.ko
ip tunnel add tunnel0 mode gre remote 192.168.20.1 local 192.168.10.1 ttl 255
ip link set tunnel0 up mtu 1400
ip addr add 172.16.1.1/30 dev tunnel0
ip addr del 172.16.1.1/30 peer 172.16.1.2/30 dev tunnel0
ip addr add 172.16.1.1/30 peer 172.16.1.2/30 dev tunnel0
ip route add 192.168.20.2/32 dev tunnel0
chmod +x /etc/init.d/gre.sh
echo "/etc/init.d/gre.sh" >> /etc/rc.d/rc.local
linux2:
insmod /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ip_gre.ko
ip tunnel add tunnel0 mode gre remote 192.168.10.1 local 192.168.20.1 ttl 255
ip addr add 172.16.1.2/30 dev tunnel0
ip addr del 172.16.1.2/30 peer 172.16.1.1/30 dev tunnel0
ip addr add 172.16.1.2/30 peer 172.16.1.1/30 dev tunnel0
B.Linux2配置PAT:
[root@linux2 ~]# iptables -t nat -A POSTROUTING -o eth0 -s 172.16.1.1/32 -j MASQUERADE
----為了防止重新開機丢失,可以将上面寫入到開機啟動腳本中
C.Linux2開啟路由轉發:
[root@linux2 ~]#echo 1 > /proc/sys/net/ipv4/ip_forward
五.效果測試:
[root@linux1 ~]# telnet 192.168.20.2
Trying 192.168.20.20...
Connected to 192.168.20.2 (192.168.20.2).
Escape character is '^]'.
User Access Verification
Password:
R2>show users
Line User Host(s) Idle Location
0 con 0 idle 00:00:45
* 66 vty 0 idle 00:00:00 192.168.20.1
Interface User Mode Idle Peer Address
R2>
本文轉自 碧雲天 51CTO部落格,原文連結:http://blog.51cto.com/333234/1298882,如需轉載請自行聯系原作者