两台Linux主机,通过GRE隧道并且PAT访问对方网络
2013-09-18 23:30
796 查看
一.概述:
在实际工作中可能会出现,在两个不同区域的两台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.配置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:
vi /etc/init.d/gre.sh ##内容如下:
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 link set tunnel0 up mtu 1400
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
chmod +x /etc/init.d/gre.sh
echo "/etc/init.d/gre.sh" >> /etc/rc.d/rc.local
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>
在实际工作中可能会出现,在两个不同区域的两台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.配置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:
vi /etc/init.d/gre.sh ##内容如下:
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 link set tunnel0 up mtu 1400
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
chmod +x /etc/init.d/gre.sh
echo "/etc/init.d/gre.sh" >> /etc/rc.d/rc.local
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>
相关文章推荐
- 通过ssh访问NAT网络模式下的虚拟机Linux
- 如何实现主机通过网络访问VBOX下的虚拟机
- Linux主机通过代理服务器进行网络连接
- 通过IPv4网络访问IPv6网络 ISATAP隧道配置方法
- CentOS 7伪分布式方式安装Hadoop-2.6.0-cdh5.6.0并且通过主机浏览器访问hadoop工作台
- RHEL 5.4 下安装和使用 ntop 全纪录(ntop:Linux下可通过Web访问的网络流量监控工具)
- linux 指定从某个ip访问某个主机或网络
- 配置中转linux机器,使连接该机器上的两个网络的两台主机可以互ping通
- Linux主机通过代理服务器进行网络连接
- Linux 网络编程之通过IP或者主机名获取信息
- (转载)Linux网络编程-使用gethostbyaddr,通过ip地址,得到该ip地址的主机的信息
- 通过ssh访问NAT网络模式虚拟机里的Linux
- 通过主机名访问Linux主机
- 开发板通过NFS挂载访问linux(虚拟机)主机中内容
- .Net使用SSH.NET通过SSH访问Linux主机
- 不同网段的两台主机通过linux路由无法ping通
- 宿主机通过SSH访问虚拟机中的Linux系统
- 两台apache主机通过Nfs访问第三台NFS-server的站点目录
- linux下两台主机通过ssh实现无密码登录