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

GRE协议组网的优点:不依赖端口。
缺点:需要两端的固定IP,效率觉得不高
前置条件
先收集两端的公网IP,规划用于隧道通信的内网IP。
- 开启
IPV4转发 - 加载
ip_gre内核模块 - 放通
防火墙
1.开发ipv4转发
https://blog.youkuaiyun.com/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网络管理工具

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.youkuaiyun.com/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@NONE和gretap0@NONE接口
Tunnelgre0接口被称为fallback接口,具有特殊的含义。它是由ip_gre内核模块在模块初始化时创建的,无法禁用此功能。

卸载ip_gre模块之后,gre0@NONE 和gretap0@NONE 才不会显示。
# 关闭tun0接口
ifdown gre1
# 卸载ip_gre模块
modprobe -r ip_gre

本文详细介绍了在CentOS7上配置GRE隧道的三种方法,包括临时配置、ifcfg持久化配置和ncmli配置。涉及步骤包括启用ipv4转发、加载内核模块、放通防火墙、配置GRE接口、邻居和路由。同时,文章还提到了GRE协议的优缺点以及Ubuntu的持久化配置,并提供了相应的命令行操作示例。
2

被折叠的 条评论
为什么被折叠?



