Tftp

為多個客戶端配置 tftp 伺服器

  • March 5, 2014

我正在使用 tftp 伺服器來保存開發板的引導映像,並且開發板經過硬編碼以查看伺服器的特定 IP 地址。這一切都很好。我現在想要做的是能夠設置第二個開發板來查看伺服器的相同 IP 地址,但獲得不同的啟動映像。我想通過讓 tftp 伺服器根據連接到它的客戶端的 IP 地址使用不同的根目錄來做到這一點。有沒有辦法做到這一點?

我意識到使用 iptables 可能有一些方法可以做到這一點,但是由於其他原因,我必須完全關閉伺服器電腦上的防火牆,所以這可能不太實用。

作為參考,我在伺服器上使用 Fedora 15,但如果需要可以更改。

DHCPD 與否?

你沒有說,但我假設你有一些 PXE 配置文件,這個 DEV 板設置要查找。通常,您會通過 DCHP 伺服器告訴 DHCP 客戶端使用什麼 PXE 映像:

subnet 192.168.0.0 netmask 255.255.255.0 {
       range 192.168.0.10 192.168.0.49;
       option subnet-mask 255.255.255.0;
       option broadcast-address 192.168.0.255;
       option routers 192.168.0.1;
       filename "pxelinux.0";
       next-server 192.168.0.100;
}

TFTP 伺服器是next-server 192.168.0.100,要載入的文件是filename "pxelinux.0"。但是由於您沒有此設置,因此您的開發板正在尋找特定 IP 地址的“下一個伺服器”,我將假設它也在尋找特定的 PXE 文件。

使用 PXELINUX

該解決方案假設您可以控制將開發板指向特定的“文件名”,在這種情況下,我建議您使用PXELINUX,該文件將是pxelinux.0.

PXELINUX 允許您根據系統的 MAC 地址自定義映像,這是更典型的方法,因為系統通常沒有以靜態方式分配給它們的實際 IP 地址,而 MAC 地址是靜態的。

設置

然後在 TFTP 伺服器的根目錄中創建如下內容:

/mybootdir/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/mybootdir/pxelinux.cfg/01-88-99-00-11-22-33
/mybootdir/pxelinux.cfg/default

上面的每個 MAC 地址都是一個文件,其中包含每個系統的相應引導節。這是我的Cobbler設置中的:

$ ls -l /tftpboot/pxelinux.cfg/
total 88
-rw-r--r-- 1 root root 292 Jul  9  2012 01-54-52-00-05-5a-ab
-rw-r--r-- 1 root root 288 Jul  9  2012 01-54-52-00-17-a6-cd

連同一個範例文件:

$ more /tftpboot/pxelinux.cfg/01-54-52-00-05-5a-ab
default linux
prompt 0
timeout 1
label linux
       kernel /images/Centos56-x86_64/vmlinuz
       ipappend 2
       append initrd=/images/Centos56-x86_64/initrd.img ksdevice=bootif lang=  console=ttyS0,115200 text serial kssendmac  ks=http://192.168.1.101/cblr/svc
/op/ks/system/server123

以上內容可以配對以滿足您的需求,但應該足以讓您入門, PXELINUX 網站上還有其他範例!

引用自:https://unix.stackexchange.com/questions/118307