我正在尝试在远程机器和本地机器之间建立一个 ipip6 隧道,以便给我的机器一个公共 IPv4 地址(它有 IPv6,但位于运营商级 NAT 后面)。
到目前为止,我已经能够通过手动运行一系列ip
命令来使其工作。
在我的本地机器(机器 A)上,我运行以下命令来设置隧道:
sudo ip link add name tun0 type ip6tnl local [machine A ipv6 address] remote [machine B ipv6 address] mode tun0
sudo ip link set dev tun0 up
sudo ip a add dev tun0 10.0.3.1
sudo ip route add 10.0.3.0/24 dev tun0
在我的远程机器(机器 B)上:
sudo ip link add name tun0 type ip6tnl local [machine B ipv6 address] remote [machine A ipv6 address] mode tun0
sudo ip link set dev tun0 up
sudo ip a add dev tun0 10.0.3.2
sudo ip route add 10.0.3.0/24 dev tun0
一切都运行良好,我可以通过隧道 ping 另一台机器。
但是,当机器重新启动时,隧道会丢失,所以我想使用 netplan 来管理它们。到目前为止,我已经能够让 netplan 正确创建具有地址的接口:
network:
version: 2
tunnels:
tun0:
mode: ipip6
remote: "[machine B ipv6 address]"
local: "[machine A ipv6 address]"
addresses:
- 10.0.3.2/32
routes:
- to: 10.0.3.0/24
via: 10.0.3.1
但是,没有创建任何路由。当我运行 时ip route
,我希望10.0.3.0/24 dev tun0 scope link
在路由表中看到,但 netplan 没有创建它。我如何让 netplan 自动创建此路由,这样我就不必sudo ip route add 10.0.3.0/24 dev tun0
每次都运行?
答案1
您的 netplan 配置和ip
命令不匹配:在工作命令中,您在没有网关的设备上声明路由,在 netplan 中,您为路由声明网关,但该网关是您尚未拥有的路由。
您要么需要声明您的网络掩码,例如 10.0.3.1是在隧道的路线中(即:10.3.0.2/30
,不是10.3.0.2/32
),或者您需要将路线声明为on-link
。
您应该能够检查ip link
双向设置隧道后的输出以比较它们是否匹配。