Linux中如何配置GRE隧道

 更新时间:2023年12月25日 11:07:14   作者: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通。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • linux下查看yum/rpm/dpkg某软件是否已安装的方法

    linux下查看yum/rpm/dpkg某软件是否已安装的方法

    这篇文章主要介绍了在linux下查看yum/rpm/dpkg某软件是否已安装的方法,文中给出了详细的示例代码,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • Linux常用命令之grep命令用法详解

    Linux常用命令之grep命令用法详解

    这篇文章主要介绍了Linux常用命令grep命令用法详解,grep命令用于对文件和文本执行重复搜索任务的Unix工具,可以通过grep命令指定特定搜索条件来搜索文件及其内容以获取有用的信息。对此感兴趣可以了解一下
    2020-07-07
  • CentOS 7.x下的LEMP环境搭建详细教程

    CentOS 7.x下的LEMP环境搭建详细教程

    我们常说的LNMP环境是指Linux/nginx/MySQL/PHP组合,LEMP包是由Linux、nginx、MariaDB/MySQL和PHP组成的,那么看来LEMP和LNMP是一样的,而现在业内习惯性的称作LEMP。这篇文章主要介绍了CentOS 7.x下的LEMP环境搭建详细教程,需要的朋友可以参考下
    2016-10-10
  • mac下配置和访问阿里云服务器(Ubuntu系统)的图文教程

    mac下配置和访问阿里云服务器(Ubuntu系统)的图文教程

    这篇文章主要介绍了mac下配置和访问阿里云服务器(Ubuntu系统)的图文教程,非常不错,具有参考借鉴价值,需要的朋友参考下
    2017-01-01
  • Ubuntu添加swap分区的方法

    Ubuntu添加swap分区的方法

    这篇文章主要介绍了Ubuntu添加swap分区的方法,提高服务器响应速度和防止应用程序内存不足错误的最简单方法之一是添加一些交换空间,非常具有实用价值,需要的朋友可以参考下
    2018-05-05
  • Linux基线检查与安全加固方式

    Linux基线检查与安全加固方式

    本文详细介绍了Linux安全加固的多个方面,包括账户管理、口令策略、SSH安全设置等,首先,对于账户管理,介绍了口令锁定策略、口令生存期、口令复杂度、密码重用限制以及禁止存在空密码账户等方面的检查和加固操作,其次,在服务管理方面
    2024-10-10
  • CentOS 6.5中SSH免密码登录配置教程

    CentOS 6.5中SSH免密码登录配置教程

    这篇文章主要介绍了CentOS 6.5中SSH免密码登录配置的相关资料,包括环境设置,本机生成公钥和私钥等知识点,本文给大家介绍的非常详细具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • CentOS下MySQL安装详细步骤

    CentOS下MySQL安装详细步骤

    首先通过网络链接的方式在线安装上mysql服务器端,然后通过相关命令操作启动,本文给大家介绍CentOS下MySQL安装详细步骤,感兴趣的朋友一起看看吧
    2016-11-11
  • linux 不改变目录结构移动 home 目录到新分区的操作方法

    linux 不改变目录结构移动 home 目录到新分区的操作方法

    这篇文章主要介绍了linux 不改变目录结构移动 home 目录到新分区的操作方法,需要的朋友可以参考下
    2017-12-12
  • Linux使用Cron+AT实现在某个确定的时间段内随机执行命令

    Linux使用Cron+AT实现在某个确定的时间段内随机执行命令

    写了个脚本签到,但是不想总是在确定的时间签到,不然在数据库里面的记录太假了,所以需要在确定的时间段内,随机选个时间执行,最后想到了使用Cron+AT实现,需要的朋友可以参考下
    2016-07-07

最新评论