天天看點

兩台Linux主機,通過GRE隧道并且PAT通路對方網絡

一.概述:

在實際工作中可能會出現,在兩個不同區域的兩台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" &gt;&gt; /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 &gt; /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&gt;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&gt;

本文轉自 碧雲天 51CTO部落格,原文連結:http://blog.51cto.com/333234/1298882,如需轉載請自行聯系原作者

繼續閱讀