如何在Linux上创建GRE隧道
问题:我想使用 GRE 隧道连接到远程网络。如何在 Linux 上的两个端点之间创建 GRE 隧道?
GRE 隧道是 IP-over-IP 隧道,可以封装 IPv4/IPv6 和单播/组播流量。要在 Linux 上创建 GRE 隧道,您需要 ip_gre 内核模块,它是 GRE over IPv4 隧道驱动程序。
因此,首先确保 ip_gre
已加载。
$ sudo modprobe ip_gre
$ lsmod | grep gre
ip_gre 22432 0
gre 12989 1 ip_gre
在这里,我们假设您要在具有以下 IP 地址的两个接口之间创建 GRE 隧道。
主机A:
192.168.233.204
主机B:
172.168.10.25
在主机 A 上,运行以下命令。
$ sudo ip tunnel add gre0 mode gre remote 172.168.10.25 local 192.168.233.204 ttl 255
$ sudo ip link set gre0 up
$ sudo ip addr add 10.10.10.1/24 dev gre0
在上面,我们创建了一个名为gre0
的GRE类型隧道设备,并将其远程地址设置为172.168.10.25
。隧道数据包将源自 192.168.233.204
(本地 IP 地址),其 TTL 字段将设置为 255
。隧道设备被分配 IP 地址 10.10.10.1
和网络掩码 255.255.255.0
。
现在验证 GRE 隧道的路由是否已正确设置:
$ ip route show
default via 135.112.29.1 dev eth0 proto static
10.10.10.0/24 dev gre0 proto kernel scope link src 10.10.10.1
在主机 B 上,运行类似的命令,如下所示。
$ sudo ip tunnel add gre0 mode gre remote 192.168.233.204 local 172.168.10.25 ttl 255
$ sudo ip link set gre0 up
$ sudo ip addr add 10.10.10.2/24 dev gre0
此时,应在主机 A 和主机 B 之间建立 GRE 隧道。要验证这一点,请从一个隧道端点 ping
另一个端点。
在主机 A 上,运行:
$ ping 10.10.10.2
PING 10.10.10.2 (10.10.10.2) 56(84) bytes of data.
64 bytes from 10.10.10.2: icmp_req=1 ttl=64 time=0.619 ms
64 bytes from 10.10.10.2: icmp_req=2 ttl=64 time=0.496 ms
64 bytes from 10.10.10.2: icmp_req=3 ttl=64 time=0.587 ms
如果要拆除现有的 GRE 隧道,请从任一端运行以下命令。
$ sudo ip link set gre0 down
$ sudo ip tunnel del gre0