Linux持久化配置GRE接口

GRE协议简介

什么是 GRE?
GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP和IPX)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中传输。 用于将数据包包装在二级数据包中,以建立直接的点对点网络连接。GRE采用了Tunnel(隧道)技术。

GRE协议组网的优点不依赖端口
缺点:需要两端固定IP效率觉得不高


前置条件

先收集两端公网IP规划用于隧道通信内网IP

  1. 开启IPV4转发
  2. 加载ip_gre内核模块
  3. 放通防火墙

1.开发ipv4转发

https://blog.csdn.net/omaidb/article/details/122719243

vim /etc/sysctl.d/gre.conf

# 开启内核开启数据包转发
## 1为开启;0为关闭
net.ipv4.ip_forward = 1 

1.1启用TCP窗口缩放

# 启用TCP窗口缩放
## 用于提高 TCP 连接的性能和吞吐量。它允许发送方和接收方在传输数据时使用更大的窗口大小,以支持更高的数据传输速率。
net.ipv4.tcp_window_scaling = 1

1.2启用自动MTU

# 开启动态MTU
net.ipv4.tcp_mtu_probing = 1

1.3禁用ipv6–可选

# 关闭IPV6
## 1为开启;0为关闭
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

1.4使内核配置生效

保存后使内核配置生效

# 加载所有的sysctl配置文件
sysctl --system

2.加载内核模块

# 查看tun模块是否加载
lsmod|grep tun

# 查看gre模块是否加载
lsmod|grep gre

# 加载GRE模块
modprobe ip_gre

# 查看模块的信息
modinfo ip_gre

# 在系统启动时自动加载tun内核模块
echo tun >/etc/modules-load.d/tun.conf

# 在系统启动时自动加载ip_gre内核模块
echo ip_gre >/etc/modules-load.d/ip_gre.conf

在这里插入图片描述


3.放通防火墙

两端机器都要执行

# 自动调整mss值--推荐
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# 防火墙允许GRE协议的传入和传出流量
iptables -A INPUT -p gre -j ACCEPT
iptables -A OUTPUT -p gre -j ACCEPT

# 放通GRE的内网通信
iptables -A FORWARD -s GRE的内网网段/24 -d GRE的内网网段/24 -j ACCEPT

方案1:ip命令临时配置GRE隧道

https://www.linuxprobe.com/gre-tunnel-config.html
使用ip命令临时配置GRE隧道,重启后将丢失配置


VM1临时配置GRE接口

# 创建GRE隧道
## 可选参数 key password1234
ip tunnel add gre1 mode gre remote <机器B的外网IP> local <机器A的外网IP>

# 指定隧道内网IP
## 建议内网网段10.187.71.0/24
ip addr add 本端内网IP/24 dev gre1 peer 对端内网IP/32

# 添加一条路由--如果已经指定peer则不需要添加路由
## 通过隧道到机房内网的路由
ip route add <B机目标内网IP> dev <GRE接口>
ip route add <B机目标内网IP网段>/<网络掩码> dev <GRE接口>

配置邻居

## lladdr 链路层地址
## 在因特网中,我们还得设置ip的关联
ip neigh add <对端内网IP> lladdr <对端公网IP> dev <GRE接口>

# 列出邻居表
ip neigh show
ip neigh show dev gre1

启动GRE隧道

# 必须先添加邻居再启用隧道
# 启用GRE隧道
ip link set gre1 up

VM2临时配置GRE接口

# 创建GRE隧道
ip tunnel add gre1 mode gre remote <机器B的外网IP> local <机器A的外网IP>

# 指定隧道内网IP
## 建议内网网段10.187.71.0/24
ip addr add 本端内网IP/24 dev gre1 peer 对端内网IP/32

# 根据需要配置route--如果已经指定peer则不需要添加路由
ip route add <B机目标内网IP> dev <GRE接口>
ip route add <B机目标内网IP网段>/<网络掩码> dev <GRE接口>

配置邻居

## 在因特网中,我们还得设置ip的关联
## lladdr 链路层地址
ip neigh add <对端内网IP> lladdr <对端公网IP> dev <GRE接口>

# 列出邻居表
ip neigh show
ip neigh show dev gre1

启动GRE隧道

# 必须先添加邻居再启用隧道
# 启用GRE隧道
ip link set gre1 up

关闭和删除gre接口

# 关闭GRE隧道
ip link set gre1 down

# 或
## 关闭接口
ifdown gre1

# 删除GRE1接口
ip tunnel del gre1

方案2:ifcfg持久化配置gre隧道

使用network服务的Centos7使用ifcfg持久化文件来配置gre的方法。

RHEL8 默认使用 NetworkManager 作为网络管理器,可能不兼容此方法。
设备gre0名称被保留。gre1为设备使用或不同的名称。


VM1配置gre1接口

设备gre0名称被保留。gre1为设备使用或不同的名称。
持久化配置文件/etc/sysconfig/network-scripts/ifcfg-gre1

# 接口名称为gre1
DEVICE=gre1
# 不使用引导协议自动配置 IP 地址
BOOTPROTO=none
# 系统启动时自动激活接口
ONBOOT=yes
# 接口类型为GRE隧道
TYPE=GRE
# 对端 外部IP地址
PEER_OUTER_IPADDR=172.20.235.124
# 对端 内部IP地址
PEER_INNER_IPADDR=10.0.0.2
# 本地 内部IP地址
MY_INNER_IPADDR=10.0.0.1
# 本地 外部IP--(可选)
# MY_OUTER_IPADDR=172.20.235.121

启动gre1接口

# 启动vm1上的gre1
ifup gre1

配置邻居

## lladdr 链路层地址
## 在因特网中,我们还得设置ip的关联
ip neigh add <对端内网IP> lladdr <对端公网IP> dev <GRE接口>

# 列出邻居表
ip neigh show
ip neigh show dev gre1

启动GRE隧道

# 必须先添加邻居再启用隧道
# 启用GRE隧道
ip link set gre1 up
# 或
ifup gre1

VM2配置gre1接口

设备gre0名称被保留。gre1为设备使用或不同的名称。
持久化配置文件/etc/sysconfig/network-scripts/ifcfg-gre1

# 接口名称为gre1
DEVICE=gre1
# 不使用引导协议自动配置 IP 地址
BOOTPROTO=none
# 系统启动时自动激活接口
ONBOOT=yes
# 接口类型为 GRE 隧道
TYPE=GRE
# 对端外部 IP 地址
PEER_OUTER_IPADDR=172.20.235.121
# 对端内部 IP 地址
PEER_INNER_IPADDR=10.0.0.1
# 本地内部 IP 地址
MY_INNER_IPADDR=10.0.0.2
# 本地 外部IP--(可选)
# MY_OUTER_IPADDR=172.20.235.124

配置邻居

## lladdr 链路层地址
## 在因特网中,我们还得设置ip的关联
ip neigh add <对端内网IP> lladdr <对端公网IP> dev <GRE接口>

# 列出邻居表
ip neigh show
ip neigh show dev gre1

启动GRE隧道

# 必须先添加邻居再启用隧道
# 启用GRE隧道
ip link set gre1 up
# 或
ifup gre1

方案3:ncmli配置GRE隧道

RHEL8默认采用nmcli网络管理工具

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/configuring-a-gre-tunnel-using-nmcli-to-encapsulate-layer-3-traffic-in-ipv4-packets_configuring-ip-tunnels

image.png


VM1配置gre1接口


创建名为gre1的GRE隧道接口

# 配置本端和远端公网IP
nmcli con add type ip-tunnel ip-tunnel.mode gre con-name gre1 ifname gre1 remote 203.0.113.10 local 198.51.100.5

将gre1接口修改为静态IP

# 将gre1接口修改为静态IP
nmcli con modify gre1 ipv4.method manual

为gre1接口手动配置本端内网IPv4地址

# 为gre1接口手动配置本端内网IPv4地址
nmcli c mod gre1 +ip4 '10.0.1.2/30'

添加静态路由

将到 192.0.2.0/24 网络的流量路由到路由器A 上的隧道 IP:

# 添加静态路由
nmcli con modify gre1 +ipv4.routes "192.0.2.0/24 10.0.1.1"

配置邻居

## lladdr 链路层地址
## 在因特网中,我们还得设置ip的关联
ip neigh add <对端内网IP> lladdr <对端公网IP> dev <GRE接口>

# 列出邻居表
ip neigh show
ip neigh show dev gre1

启用 gre1 连接

# 启用 gre1 连接
nmcli con up gre1

VM2配置gre1接口


创建名为gre1的GRE隧道接口

# 配置本端和远端公网IP
nmcli con add type ip-tunnel ip-tunnel.mode gre con-name gre1 ifname gre1 remote 198.51.100.5 local 203.0.113.10

将gre1接口修改为静态IP

# 将gre1接口修改为静态IP
nmcli con modify gre1 ipv4.method manual

为gre1接口手动配置本端内网IPv4地址

# 为gre1接口手动配置本端内网IPv4地址
nmcli c mod gre1 +ip4 '10.0.1.1/30'

添加静态路由

将到 172.16.0.0/24 网络的流量路由到路由器B 上的隧道 IP:

# 添加静态路由
nmcli con modify gre1 +ipv4.routes "172.16.0.0/24 10.0.1.2"

配置邻居

## lladdr 链路层地址
## 在因特网中,我们还得设置ip的关联
ip neigh add <对端内网IP> lladdr <对端公网IP> dev <GRE接口>

# 列出邻居表
ip neigh show
ip neigh show dev gre1

启用gre1连接

# 启用gre1连接
nmcli con up gre1

结果验证

在这里插入图片描述
在这里插入图片描述


Ubuntu持久化配置GRE接口

https://blog.csdn.net/NewTyun/article/details/109831641


两端Ubuntu配置gre1接口

/etc/netplan/00-installer-config.yaml

# /etc/netplan/00-installer-config.yaml
network:
  # 以太网配置--本地网卡ens3的配置
  ethernets:
    ens3:
      # 系统启动不用等待网络接口完全激活
      optional: true
      # 不使用DHCP获取IP--手动配置IP地址
      dhcp4: false
      addresses:
        # 本地网络接口 ens3 的 IP 地址为 200.1.1.1/24
        - 200.1.1.1/24
      # 网关的 IPv4 地址为 200.1.1.254
      gateway4: 200.1.1.254
      nameservers:
        addresses:
          # DNS 服务器的地址为 114.114.114.114
          - 114.114.114.114
  # 隧道配置
  tunnels:
    # 接口名称
    gre1:
      # 使用 GRE 模式进行隧道通信
      mode: gre
      # 本地 GRE 隧道端点的 IP 地址为 200.1.1.1
      local: 200.1.1.1
      # 远程 GRE 隧道端点的 IP 地址为 100.1.1.1
      remote: 100.1.1.1
      # 为 GRE 隧道分配的内网地址为 172.16.1.1/24
      addresses: [172.16.1.1/24]
    	# 路由配置
      routes:
        # 隧道内部的目标子网为 192.168.1.0/24
        - to: 192.168.1.0/24
          # 经由 GRE 隧道的下一跳 IP 地址为 172.16.1.2
          via: 172.16.1.2
          # 路由优先级,越小优先级越高
          # metric: 50

保存配置

保存配置后,验证配置

# 先验证配置
netplay try

如果机器没有断掉的话可以按 ENTER 确认配置
如果和主机 SSH中断,等待 120S 会自动恢复。

确认配置无误后,应用配置

# 应用配置
netplay apply

关闭gre0@NONEgretap0@NONE接口

Tunnelgre0接口被称为fallback接口,具有特殊的含义。它是由ip_gre内核模块在模块初始化时创建的,无法禁用此功能。
在这里插入图片描述

卸载ip_gre模块之后,gre0@NONEgretap0@NONE不会显示

# 关闭tun0接口
ifdown gre1

# 卸载ip_gre模块
modprobe -r ip_gre
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值