办理方案:在远程接入设备(如 PC、路由器)和总部网络的 VPN 网关之间建立 GRE over IPsec 隧道。首先,在隧道两头之间协商 IPsec 安全联盟(SA),对 GRE 隧道的数据举行加密和认证。然后,将需要传输的数据封装在 GRE 隧道内,再将 GRE 数据包封装在 IPsec 隧道内举行传输。如许就实现了数据在公共网络上的安全传输,防止了窃听和窜改。
隧道对端接收到keepalive包后,会解封装,检查内层GRE头的PT字段。若为0,则辨以为keepalive包,并扬弃它,同时重置keepalive计数器。
4. Linux Ubuntu配置GRE接口
4.1 Linux内核支持GRE选项配置
Linux 内核支持GRE接口需要启用以下相关配置。
功能配置宏描述GRE 隧道支持CONFIG_NET_IPGRE启用通用 GRE 隧道支持,是使用 GRE 的基础。GRE 隧道设备支持CONFIG_NET_IPGRE_DEMUX启用此选项可以支持多个 GRE 隧道设备,每个设备可以单独配置。GRE 广播和组播支持(可选)CONFIG_NET_IPGRE_BROADCAST启用 GRE 隧道的广播和组播支持,答应 GRE 隧道传输广播和组播数据包。Netfilter 连接跟踪支持(可选)CONFIG_NF_CT_PROTO_GRE如果需要对 GRE 数据包举行连接跟踪和状态检查(如防火墙规则),则需要启用此选项。GRE IPv6报文支持CONFIG_IPV6_GRE启用GRE over IPv6支持。IP 隧道驱动步伐(可选)CONFIG_NET_IPIP虽然此选项重要用于 IPIP 隧道,但某些 GRE 实现大概也依靠于它。 在 Linux 内核的 make menuconfig 配置界面中,这些选项通常位于以下位置:
Networking support --->
Networking options --->
[*] IP: GRE demultiplexer
[*] IP: broadcast GRE over IP
-*- The IPv6 protocol --->
[*] IPv6: GRE demultiplexer
[*] IPv6: broadcast GRE over IPv6
Device Drivers --->
[*] Network device support --->
<*> IP: GRE over IP
<*> IPv6: GRE over IPv6
<*> IP: IPIP tunnel
Netfilter Configuration --->
[*] IP virtual reassembly in netfilter
[M] "conntrack" connection tracking match support
[M] "conntrack" connection tracking match support for GRE
复制代码
在实际运行的ubuntu服务器上,可以检查/boot目录下配置文件,如下:
onceday@ubuntu1:~$ cat /boot/config-5.15.0-100-generic |grep GRE
onceday@ubuntu2:~$ ip tunnel add gre1 mode gre remote 6.6.6.6 local 6.6.6.7 ttl 255 onceday@ubuntu2:~$ ip addr add 10.10.5.2/30 dev gre1 onceday@ubuntu2:~$ ip link set gre1 up
onceday@ubuntu2:~$ ip route add 10.10.0.0/16 dev gre1
onceday@ubuntu2:~$ ip addr 3: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:56:7b:06 brd ff:ff:ff:ff:ff:ff inet 6.6.6.7/24 scope global enp0s9 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe56:7b06/64 scope link valid_lft forever preferred_lft forever 7: gre1@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN group default qlen 1000 link/gre 6.6.6.7 peer 6.6.6.6 inet 10.10.5.2/30 scope global gre1 valid_lft forever preferred_lft forever inet6 fe80::606:607/64 scope link valid_lft forever preferred_lft forever
复制代码
完成以上配置之后,可以尝试举行ping操作,并且用TCP抓包看看GRE隧道报文。
onceday@ubuntu1:~$ ping 10.10.5.2
PING 10.10.5.2 (10.10.5.2) 56(84) bytes of data.
64 bytes from 10.10.5.2: icmp_seq=1 ttl=64 time=0.810 ms
64 bytes from 10.10.5.2: icmp_seq=2 ttl=64 time=0.991 ms