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