我正在尝试在我的两台 Ubuntu vps 之间建立一个 gre 隧道。两台服务器都是从全新安装的 Ubuntu 20.04 开始使用的。并且没有启用防火墙。
我的表现基于这教程仍然无法从任何一方成功执行 ping。我进一步解释我的设置。
服务器A:2.2.2.2
服务器B:3.3.3.3
我想从服务器 A 到服务器 B 创建 GRE 隧道。
我在两台服务器上都启用了 ipforwarding:
cat /proc/sys/net/ipv4/ip_forward
1
在服务器 AI 上使用以下方法设置隧道:
sudo modeprobe ip_gre
sudo iptunnel add gre1 mode gre local 2.2.2.2 remote 3.3.3.3 ttl 255
sudo ip addr add 10.0.0.1/30 dev gre1
sudo ip link set gre1 up
在服务器 BI 上,使用以下命令,就像服务器 A 一样,但本地和远程 IP 反转:
sudo modeprobe ip_gre
sudo iptunnel add gre1 mode gre local 3.3.3.3 remote 2.2.2.2 ttl 255
sudo ip addr add 10.0.0.2/30 dev gre1
sudo ip link set gre1 up
现在我假设我应该能够从另一台服务器 ping 通每台服务器。但数据包丢失率是 100%。请告诉我我的哪部分指令是错误的,如果没有错,我该如何跟踪我的 ping 数据包以查看在哪里以及是谁丢弃了它们。
答案1
这些命令通常是正确的。您没有提供服务器之间距离的详细信息,我猜其中一个服务器距离很远,隧道正在穿越互联网。GRE 数据包是一个单独的协议组,而不是 tcp 或 udp。两者之间可能存在某种东西 - 不受您的控制 - 过滤掉此类数据包。
调试选项:
您可以使用 tcpdump 检查 GRE 数据包是否离开源主机并到达目标主机。
源主机:
tcpdump -i <INTERFACENAME> -n -c 300 protochain GRE and host 3.3.3.3
ping -c5 3.3.3.3
现在在第二个终端上对 IP 为 2.2.2.2 的主机执行
目标主机
tcpdump -i <INTERFACENAME> -n -c 300 protochain GRE and host 2.2.2.2
ping -c5 3.3.3.3
现在在 IP 为 2.2.2.2 的主机上执行
替换为您的接口名称。