事故起因
一台RFCHOST的服务器最近安装了Netdata做监控,然后经常收到丢包告警,上服务器查了半天也没有查到原因,决定换系统到Arch(Arch大法好,Arch易踩坑)。
然后我这台服务器之前的IP是美国原生IP,但是上一任不知道做了什么天怒人怨的事情,被封了,所以现在的IP是开工单换过来的香港IP。
更换ArchLinux系统还是比较简单的,直接一键脚本vps2arch就能解决,然后就悲剧了。这个脚本写的十分简单,简单到就把你的IP写了进去就好了。
然后问题来了,重启服务器等了10分钟还没重启好,我就知道凉凉了。VNC连回去一直都是No route to host。还好有VNC,连上去看了下,IP是有了,但是route没了。
原始服务器配置:
default via 10.0.0.1 dev eth0
default via 10.0.0.1 dev eth0 onlink
10.0.0.1 dev eth0 scope link
这个配置有个关键的onlink,就是这个配置绕开了一致性检查,而默认生成配置文件十分简单,如下所示
[Match]
Name=eth0
[Network]
Gateway=10.0.0.1
Address=xxx.xxx.xxx.xxx/[mask]
就是这个/32的地址,因为是从其他地区拉过来的,不属于当前网段,所以就很坑。
当默认配置应用上去的时候,ip route显示就是空的,因为10.0.0.1不属于当前ip的网段(/32能属于什么网段呢?)
配置Onlink
Onlink的配置是不难,主要是这个配置项没什么人用。
直接给出样例参考
[Match]
Name=eth0
[Network]
Address=xxx.xxx.xxx.xxx/[mask]
DNS=1.1.1.1,8.8.8.8
[Route]
Gateway=10.0.0.1
GatewayOnLink=true
这是IPv4的配置,IPv6的配置就是重复[Network]以下的所有内容。
增加自定义的Route
manpage里没有说明每增加一条Route其实是增加一个[Route]Section
[Network]
Address=xxx.xxx.xxx.xxx/[mask]
DNS=1.1.1.1,8.8.8.8
[Route]
Scope=link
Destination=10.0.0.1/32
[Route]
Gateway=10.0.0.1
GatewayOnLink=true
总结
你永远想不到配置VPS会踩什么坑(手动狗头)
不过好在还是解决了
参考文档 systemd.network
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
云曦的秘密基地
本文地址: Systemd-Networkd设置OnLink
本文地址: Systemd-Networkd设置OnLink