标签归档:dhcp

通过DHCP指定mtu

起因

家里的Proxmox母机开了VXLAN的SDN,但是由于vxlan隧道需要吃掉几十个字节作为包的头,导致vxlan的子网里面必须将mtu缩小至1450(母机之间互联用的是1500),但是每次开虚拟机就要手动改mtu这个非常的不友好。

在网上搜索手动指定mtu,文章全部都是使用静态的ip地址,在进一步搜索的时候,发现需要修改Linux的dhcpclient配置,在配置文件里面看到,在客户端发送dhcp请求的时候,是包含接口mtu信息的。

这样就有趣了。

那是不是DHCP服务器可以指定客户端的接口mtu呢?那就不需要我一个一个手动修改了。

进行一番搜索之后,果然发现DHCP里面指定了一个option 26,可以定义接口mtu。而RouterOS也支持自定义dhcp options,官方的wiki里面有关于option的写法。

开搞

配置过程中充满了曲折,我尝试在winbox里面添加option,根据教程,我尝试在value里面填入1400,报错,然后尝试填入0x5aa(1450的十六进制值),也不行。然后我发现,填值据然要加上单引号,于是填入‘1450’,过了。

然而事情并不顺利,我在客户端通过DHCP拿到一个奇怪的mtu,43525。当时我就蒙圈了,这啥情况?

于是我胡乱填了更多的值,得到了更多奇奇怪怪大的一批的mtu值。着实搞不明白,然后仔细看了一下winbox中给的rawvalue,看着怎么这么眼熟,好家伙,这不是把字节的顺序给反过来了吗!

本来应该是05 aa,结果变成了 aa 05

我再确认一下整个活

90000转成十六进制实际上是 01 5f 90,结果变成了 90 5f 01

确认之后,就可以根据需要的raw value反推需要填的值。我们需要 05 aa ,就将 aa 05转换成十进制,得出43525,填入之后得到正确的raw value。

得到正确的raw value。

经测试,能够正常获取到1450的mtu。

报告Bug

这明显是有问题啊,我就去给mikrotik提了个请求,得到回复说马上就修。

mikrotik确认了这个故障,说准备修复。

继续阅读官方wiki

后来仔细阅读了一下官方的wiki,里面提到确实可以用0x来输入十六进制的值,也不用用单引号括住。那为啥我输入0x5aa报错?再来一次的时候发现……0x05aa是完全没问题的,但是0x5aa就不行。

开头的0不能省略

看着顺眼多了。后续等官方修复这个Bug之后或许可以换回去’1450’,这样就更直观了。

使用PXE从NFS服务器启动Debian Linux

一、开篇

首先,我使用的是debian的linux,版本是stretch,其他发行版的话只能作为参考,无法照搬。

然后上参考:https://blog.csdn.net/politefish/article/details/4444417

在网上搜无盘系统,全部都是指导怎么启动安装器的,这个我之前已经做过了,没什么问题,但是如何做一个能直接运行的linux,倒还是第一次。上边这边文章里面洋洋撒撒一大串,不过还是指引了我找到了比较核心的内容。

二、组件部署

首先PXE启动系统我这边就不说了,参考有很多,比如说这个这个,还有这个。总所周之,PXE启动linux需要3个组件,一个DHCP服务器,一个tftp服务器,还有一个NFS服务器。因为我家的路由器系统都比较的有好,DHCP服务器方面都支持设置PXE的引导,所以不需要额外的架设一个DHCP服务器。

tftp服务器和NFS服务器我是使用我家的一台QNAP的NAS来做的,性能和整合度不错,由于是同一份文件的不同共享,所以就不需要每次更新了kernel之后还需要单独将kernel拷贝到tftp服务器去了。

 

首先是tftp服务器,先把tftp服务器开起来,指向目标,限制好来源

然后参考这个,把所需的文件放到目标

看起来像是这样:

PXE
├── debian
│ └── #这里放Debian的系统
├── ldlinux.c32
├── libcom32.c32
├── libutil.c32
├── pxelinux.0
├── pxelinux.cfg
│ └── default
└── vesamenu.c32

再然后就是NFS系统,在系统中调整NFS分享,让/PXE能够以NFS的形式挂载,这就可以了,如何建立NFS服务器并且建立共享,这里不多说。

三、系统安装

然后先安装好基本系统,再回来修改default的配置文件

参考了网上搜出来的文章,我发现他用的方法就是使用debootstrap来安装系统。嗯?看着眼熟,不就是我当年做过的事情吗?哎呀,这就容易了嘛。

这里我选择的方法是用containerstation跑个LXC容器,将文件夹挂载到容器中。如果手边只有windows的机器,可以选择上虚拟机,然后挂载NFS共享。

假设将目标挂载到/mnt,就可以使用这样的方式来安装基本的debian系统

 

debootstrap –arch=amd64 stretch /mnt/ http://ftp.cn.debian.org/debian/

然后稍作等待,你就获得了一个debian系统了。当然,推荐使用同一个架构的CPU,因为这样接下来的后续安装就会方便很多。

chroot到新系统之后就可以向刚安装的系统一样去做后期的调整了。注意至少有一下这么几个

1.修改root的密码

2.新增用户

以下几个我是当时做了的配置但看起来并不是必须的,酌情参考

3.修改fstab和mtab,详细看参考链接,但是我登录系统之后看mount表完全不是那么一回事

4.配置网络,参考链接里面还是用的eth0,但是我登录系统后看到的接口都不是eth0而是en0了,又是一个过期的文档

5.调整时区,这个最好做一下,还有用timedatectl set-local-rtc 1 设置将RTC时钟设为本地时间而不是UTC时间,避免和windows来回切的时候导致windows时间混乱

然后把你想安装的东西都安装上。duang,系统就安装好了。

四、调整PXE启动配置

最后回来调整一下PXE的启动文件,这里是最精华的地方:

DEFAULT vesamenu.c32
PROMPT 0
MENU TITLE Home PXE-Boot Server
label Diskless Debian
MENU LABEL Diskless Debian
KERNEL debian/vmlinuz
append vga=normal initrd=debian/initrd.img ramdisk_size=14332 root=/dev/nfs nfsroot=NFS服务器地址:/PXE/debian rw --
TEXT HELP
Starts the Diskless Debian
ENDTEXT

需要注意的是,这里是系统的根目录下存在两个指向boot的链接,所以kernel和initrd才是这个位置,至于其他的参数,我暂时还没了解到如何使用,先保留着,看以后是否再需要优化。

配置完成后,就可以启动主机,然后选择从LAN启动了,启动之后,可以看到根目录是从nfs服务器挂载的。