Linux中如何配置GRE隧道
作者:beeworkshop
这篇文章主要介绍了Linux中如何配置GRE隧道问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
配置拓扑
这里使用ens33接口地址来建立隧道,使用ens37接口地址做隧道接口标识,使用ens38接口地址来模拟私网业务地址。
实际场景中,用于建立隧道的地址是公网地址,而业务地址是私网地址,GRE隧道使得私网地址空间不会暴露于公网。
具体配置
1. node02
开启路由转发,加载GRE协议模块。
# 开启ipv4路由转发 echo 1 > /proc/sys/net/ipv4/ip_forward # 查看GRE内核模块信息 modinfo ip_gre # 查看GRE内核模块是否安装 lsmod | grep ip_gre # 加载GRE内核模块 modprobe ip_gre modprobe --first-time ip_gre
创建隧道虚接口tunnel2并配置隧道接口ip(隧道标识)。
# 配置GRE隧道的source和destination ip(外部,公网地址) ip tunnel add tunnel2 mode gre local 192.168.91.129 remote 192.168.91.130 ttl 255 dev ens33 # 配置GRE tunnel接口的隧道标识(在数通设备上可以通过ip unnumber借用其他接口的primary ip) ip addr add 172.16.18.10 dev tunnel2 peer 172.16.20.20/24 # 开启tunnel2接口 ip link set dev tunnel2 up # 查看tunnel接口 ifconfig ip a
添加指向隧道接口的路由以引导流量进入隧道。
# 添加私网路由指向隧道口 ip route add 10.10.20.20/32 dev tunnel2 ip route add 172.16.20.20/32 dev tunnel2
2. node03
开启路由转发,加载GRE协议模块。
# 开启ipv4路由转发 echo 1 > /proc/sys/net/ipv4/ip_forward # 加载GRE内核模块 modprobe --first-time ip_gre
创建隧道虚接口tunnel2并配置隧道接口ip(隧道标识)。
# 配置GRE隧道的source和destination ip(外部,公网地址) ip tunnel add tunnel2 mode gre local 192.168.91.130 remote 192.168.91.129 ttl 255 dev ens33 # 配置GRE tunnel接口的隧道标识(在数通设备上可以通过ip unnumber借用其他接口的primary ip) ip addr add 172.16.20.20 dev tunnel2 peer 172.16.18.10/24 # 开启tunnel2接口 ip link set dev tunnel2 up
添加指向隧道接口的路由以引导流量进入隧道。
# 添加私网路由指向隧道口 ip route add 10.10.10.10/32 dev tunnel2 ip route add 172.16.18.10/32 dev tunnel2
3. 查看路由表
route -n # 推荐此法 或者 netstat -nr
4. 验证
- 隧道建立
[root@node02 ~]# ping -c3 -I 10.10.10.10 10.10.20.20 PING 10.10.20.20 (10.10.20.20) from 10.10.10.10 : 56(84) bytes of data. 64 bytes from 10.10.20.20: icmp_seq=1 ttl=64 time=0.708 ms 64 bytes from 10.10.20.20: icmp_seq=2 ttl=64 time=0.523 ms 64 bytes from 10.10.20.20: icmp_seq=3 ttl=64 time=0.555 ms --- 10.10.20.20 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2001ms rtt min/avg/max/mdev = 0.523/0.595/0.708/0.083 ms [root@node02 ~]# ping -c3 -I 172.16.18.10 172.16.20.20 PING 172.16.20.20 (172.16.20.20) from 172.16.18.10 : 56(84) bytes of data. 64 bytes from 172.16.20.20: icmp_seq=1 ttl=64 time=1.12 ms 64 bytes from 172.16.20.20: icmp_seq=2 ttl=64 time=0.509 ms 64 bytes from 172.16.20.20: icmp_seq=3 ttl=64 time=0.469 ms --- 172.16.20.20 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2006ms rtt min/avg/max/mdev = 0.469/0.700/1.122/0.298 ms
- 隧道拆除
将tunnel2接口shutdown
ip link set dev tunnel2 down
再进行ping测试
[root@node02 ~]# ping -c3 -I 10.10.10.10 10.10.20.20 PING 10.10.20.20 (10.10.20.20) from 10.10.10.10 : 56(84) bytes of data. --- 10.10.20.20 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2017ms [root@node02 ~]# ping -c3 -I 172.16.18.10 172.16.20.20 PING 172.16.20.20 (172.16.20.20) from 172.16.18.10 : 56(84) bytes of data. --- 172.16.20.20 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2023ms
5. 配置多个环回地址
在上述的配置中可以发现启用了多个物理网卡来提供本地IP,但在实际应用中可能不具备这样的条件。配置多个环回口地址是一个解决思路。
操作步骤如下:
cd /etc/sysconfig/network-scripts/ cp ifcfg-lo ifcfg-lo:1 vim ifcfg-lo:1 ---------------------------------------------------- DEVICE=lo:1 IPADDR=10.199.18.16 NETMASK=255.255.255.255 ONBOOT=yes NAME=loopback1 ---------------------------------------------------- systemctl restart network ifconfig ---------------------------------------------------- lo:1: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 10.199.18.16 netmask 255.255.255.255 loop txqueuelen 1000 (Local Loopback) ---------------------------------------------------- ip a ---------------------------------------------------- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 10.199.18.16/32 brd 10.199.18.16 scope global lo:1 valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever ---------------------------------------------------- [root@node01 network-scripts]# ping -c3 10.199.18.16 PING 10.199.18.16 (10.199.18.16) 56(84) bytes of data. 64 bytes from 10.199.18.16: icmp_seq=1 ttl=64 time=0.045 ms 64 bytes from 10.199.18.16: icmp_seq=2 ttl=64 time=0.050 ms 64 bytes from 10.199.18.16: icmp_seq=3 ttl=64 time=0.053 ms
如果是非持久化的添加(重启后失效),可以使用如下命令:
ip addr add 10.199.18.16/32 dev lo:1
使用上述命令添加的环回接口地址只能使用“ ip a ”命令才可以查看到,使用“ ifconfig ”命令是看不到的。
但是在系统中可以ping通。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。