Ubuntu 18.04 配置 HE Tunnelbroker

我无比怀念 Ubuntu 还在用 ifupdown 的年代,netplan.io 什么垃圾玩意。

起因是这样的,看阿里云打折,所以买了一个轻量 HK 来玩。阿里云的机器嘛,拿到手第一件事肯定是跑脚本重装系统,然后就默认装了最新的 Ubuntu 18.04。接下来发现,这机器没有 IPv6,于是就打算配置一下 HE Tunnelbroker,这时候问题就出现了,18.04 默认已经没有 ifupdown 而改用 netplan.io,HE 也没有提供 netplan 的样例配置。考虑到用新不用旧的原则(类比 systemd 和 Ubuntu upstart/update-rc.d),于是想折腾一下 netplan。

netplan 官网上宣称,它可以配置 6in4 Tunnel,还在官方示例(https://netplan.io/examples)最下面给出了对应的语法,然而在最新的 Ubuntu 内置版本上,tunnels 这个关键字根本不识别。查询 bug 发现在 https://bugs.launchpad.net/netplan/+bug/1799487 这里有人提到 netplan 无法使用 6in4 tunnel 的问题,也提出了一个使用 systemd-networkd 的解决方案。netplan 的 tunnel 支持根据这个 bug report 的说法,已经在一月初 commit,可能还没合并到软件包的版本里面吧。

阿里云的镜像,默认的网络配置是在 /etc/netplan/01-netcfg.yaml 中,默认是 DHCPv4 的方式获取内网 IP。我们先通过这里看到 v4 interface 的名称,比如 ens3。之后创建如下文件:

/etc/systemd/network/he-ipv6.netdev

[NetDev]
Name=he-ipv6
Kind=sit
MTUBytes=1480

[Tunnel]
Local=<local IPv4 address> # should be the internal IPv4 address on Aliyun instead of the public IPv4 address
Remote=<tunnel server IPv4 address>
TTL=64

/etc/systemd/network/he-ipv6.network

[Match]
Name=he-ipv6

[Network]
Address=<Client IPv6 Address>/64
Gateway=<Server IPv6 Address>

/etc/systemd/network/10-netplan-<iface name>.network.d/tunnel.conf
e.g. /etc/systemd/network/10-netplan-ens3.network.d/tunnel.conf

[Network]
Tunnel=he-ipv6

表示在默认的 v4 interface 上创建 tunnel。之后 systemctl restart systemd-networkd 即可

或者也可以使用 ip 命令在一个 systemd service 中完成添加:

[Unit]
Description=he.net IPv6 tunnel
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/ip tunnel add he-ipv6 mode sit remote <server IPv4 address> local <client IPv4 address> ttl 255
ExecStart=/sbin/ip link set he-ipv6 up mtu 1480
ExecStart=/sbin/ip addr add <client IPv6 address> dev he-ipv6
ExecStart=/sbin/ip -6 route add ::/0 dev he-ipv6
ExecStop=/sbin/ip -6 route del ::/0 dev he-ipv6
ExecStop=/sbin/ip link set he-ipv6 down
ExecStop=/sbin/ip tunnel del he-ipv6

[Install]
WantedBy=multi-user.target

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注