事故起因

一台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

说点什么
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...