Kesimpulan

Kesimpulan

PXE (Lingkungan Eksekusi Preboot) adalah lingkungan server klien yang memungkinkan untuk mem-boot dan menginstal sistem operasi tanpa memerlukan media fisik. Gagasan intinya cukup sederhana: pada tahap yang sangat awal, klien mendapatkan alamat IP dari server DHCP dan mengunduh file yang diperlukan untuk melakukan proses boot melalui tftp Protokol (FTP sepele). Dalam tutorial ini kita akan menggunakan dnsmasq Aplikasi: Ini dapat digunakan sebagai server DHCP utama atau di DHCP proxy mode jika server DHCP lain ada di jaringan; Ini juga menyediakan layanan TFTP yang digunakan untuk mentransfer file.

Dalam tutorial ini Anda akan belajar:

  • Cara Mengkonfigurasi Pxelinux dan membuat menu boot
  • Cara mengekstrak file dari ISO dan mengatur struktur file yang sesuai
  • Cara mengkonfigurasi dnsmasq sebagai server DHCP standar atau proxy
  • Cara mengkonfigurasi server tftp embed di dnsmasq
  • Bagaimana mengizinkan lalu lintas melalui port yang dibutuhkan menggunakan UFW
Raspberry Pi sebagai server boot PXE

Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem Raspberry Pi Os (sebelumnya dikenal sebagai Raspbian)
Perangkat lunak dnsmasq, pxelinux, syslinux-efi
Lainnya Izin root
Konvensi # - mensyaratkan Linux -Commands untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$-mensyaratkan Linux-Commands untuk dieksekusi sebagai pengguna reguler yang tidak istimewa

Memasang paket

Hal pertama yang harus kita lakukan adalah memasang beberapa paket penting:

  • dnsmasq
  • pxelinux
  • SYSLINUX-EFI

DNSMASQ menyediakan DHCP dan tftp jasa; Pxelinux adalah anggota bootloader dari syslinux keluarga, dan secara khusus dirancang untuk lingkungan PXE; Paket Syslinux-EFI_ berisi pustaka yang diperlukan untuk mendukung Efi Klien. Untuk menginstal paket di Raspberry Pi Os, kami dapat menjalankan:

$ sudo apt-get update && sudo apt-get install dnsmasq pxelinux syslinux-efi 

Struktur file

Setelah paket yang dibutuhkan diinstal, kami dapat melanjutkan dan mengatur struktur file. Demi tutorial ini, akar dari seluruh pengaturan akan menjadi /mnt/data/netboot direktori, yang juga akan digunakan sebagai tftp root (didefinisikan di dalam file konfigurasi DNSMASQ); Semua file yang dibutuhkan akan disimpan di dalamnya.

File dan modul syslinux

Kami ingin dapat mendukung boot klien Bios Dan Efi Mode, oleh karena itu hal pertama yang perlu kita lakukan adalah membuat dua direktori yang dinamai setelah arsitektur di dalamnya /mnt/data/netboot:

$ mkdir/mnt/data/netboot/bios, efi64 


Setiap arsitektur membutuhkan beberapa pustaka syslinux spesifik untuk bekerja. Kami menyalinnya di direktori yang sesuai:

$ cp \/usr/lib/syslinux/modules/bios/ldlinux, vesamenu, libcom32, libutil.C32 \/usr/lib/pxelinux/pxelinux.0 \/mnt/data/netboot/bios $ cp \/usr/lib/syslinux/modul/efi64/ldlinux.e64 \/usr/lib/syslinux/modules/efi64/vesamenu, libcom32, libutil.C32 \/usr/lib/syslinux.EFI/EFI64/SYSLINUX.EFI \/Mnt/Data/Netboot/EFI64 

File distribusi

Pada titik ini kita perlu membuat direktori yang akan meng -host distribusi yang ingin kami sediakan di menu boot kami. Sebut saja boot:

$ mkdir/mnt/data/netboot/boot 

Dalam tutorial ini, hanya sebagai contoh, kami akan bekerja dengan gambar netinstall debian. For convenience, I will suppose a previously verified ISO (take a look at our article about checking the integrity and the signature of a distribution image with gpg if you want to know how to verify the integrity and signature of a distribution image) to be available pada sistem file RPI di /mnt/data/isos direktori.

Kami membuat jalur yang tepat di dalamnya /mnt/data/netboot/boot, Direktori penamaan setelah arsitektur, nama, dan versi sistem yang ingin kami berikan di menu kami (dalam hal ini AMD64 - Debian 10):

$ mkdir -p/mnt/data/netboot/boot/amd64/debian/10 

Pilihan jalur ini sewenang -wenang, jadi jangan ragu untuk membuat sendiri. Pada titik ini kita harus memasang ISO distribusi dan menyalin file ke direktori tujuan. Untuk memasang ISO yang kami jalankan:

$ sudo mount -o loop -t iso9660/mnt/data/isos/debian -10.4.0-AMD64-Netinst.ISO /Media 

Setelah ISO dipasang, file -nya akan dapat diakses di bawah /media. Saya suka menggunakan rsync untuk menyalinnya:

$ sudo rsync -av/media//mnt/data/netboot/boot/amd64/debian/10 

Setelah file disalin, kami dapat menghapus ISO:

$ sudo Umount /media 

Pada langkah berikutnya kita akan melihat cara membuat menu boot menggunakan sintaks Syslinux.

Membuat menu boot

Sekarang kami memiliki file distribusi yang ada, kami dapat membuat menu boot. di dalam kami root tftp, (/mnt/data/netboot Dalam kasus kami), kami membuat pxelinux.CFG direktori:

$ mkdir/mnt/data/netboot/pxelinux.CFG 

Di dalam pxelinux.CFG direktori kami membuat file yang dipanggil bawaan dan tempel konfigurasi berikut di dalamnya:

Judul Menu PXE Boot Menu Default Vesamenu.C32 Label Menu Lokal Label Label Boot Dari Drive Lokal LokalBoot 0xffff Menu Mulai AMD64 Judul Menu AMD64 Menu Mulai Judul Menu Debian Label Debian Instalasi Menu Label ^Instalasi Grafis Kernel :: Boot/AMD64/Debian/10/Instal.AMD/VMLINUZ Tambahkan VGA = 788 initrd = :: boot/amd64/debian/10/instal.AMD/GTK/INITRD.GZ --- label label instal menu label ^instal kernel :: boot/amd64/debian/10/install.AMD/VMLINUZ Tambahkan VGA = 788 initrd = :: boot/amd64/debian/10/instal.AMD/INITRD.GZ --- Menu Menu yang Tenang Akhir Menu 

Konfigurasi di atas akan menghasilkan menu bersarang yang dibangun mengikuti jalur direktori yang kami buat di dalam boot direktori. Sekali lagi, yang di atas hanyalah sebuah contoh. Anda dapat membuat dan menyusun menu seperti yang Anda inginkan; Yang perlu Anda lakukan adalah menggunakan sintaks yang sesuai, seperti yang dijelaskan di halaman wiki syslinux khusus.

Menu berisi entri untuk membiarkan pengguna mem -boot dari hard drive lokal, submenu dengan AMD64 label, dan dua entri untuk distribusi Debian, installgui Dan Install. Yang pertama meluncurkan penginstal distribusi dalam mode grafis, yang terakhir dalam mode tekstual yang tampaknya digunakan ncurses Perpustakaan.

Bagaimana kita bisa mengetahui parameter yang tepat untuk digunakan di INTI Dan MENAMBAHKAN baris? Kita dapat melihat konfigurasi menu yang ada di dalam konten distribusi yang kami ekstrak dari ISO. Dalam kasus kami, misalnya, /mnt/data/netboot/boot/amd64/debian/10/isolinux/menu.CFG. Sayangnya tidak semua distribusi menggunakan sintaks yang sama, oleh karena itu kita harus memperhatikan dan menyesuaikan konfigurasi sesuai kebutuhan.

Satu hal yang harus kami beradaptasi dari konfigurasi asli, adalah jalur dari vmlinuz Dan initrd.GZ file. Ingatlah bahwa kami mengakses file -file tersebut melalui tftp!

Biasanya, jalur file ditafsirkan sebagai relatif ke direktori root TFTP, tetapi dalam konfigurasi di atas, seperti yang dapat Anda amati, kami menggunakan :: Sintaks (misalnya kami menulis :: boot/amd64/debian/10/install.AMD/VMlinuz untuk merujuk gambar kernel). Mengapa kami melakukan ini?

Karena kami membuat dua direktori yang memegang perpustakaan memberikan dukungan untuk bios Dan EFI64 mode dan kami ingin menggunakan konfigurasi menu yang sama untuk keduanya, kami perlu menautkan pxelinux.CFG Direktori dalam keduanya, oleh karena itu kita perlu referensi tftp root dengan cara "absolut". Itu :: Simbol memungkinkan kita untuk melakukan hal ini: Ini adalah cara untuk merujuk jalur absolut ke root TFTP.

Seandainya direktori kerja kami saat ini /mnt/data/netboot, Untuk menautkan konfigurasi menu di direktori yang disebutkan di atas, kami dapat mengeluarkan perintah berikut:

$ ln -rs pxelinux.CFG Bios && ln -rs pxelinux.CFG EFI64 


Di sini kami menggunakan -R opsi ln perintah untuk membuat relatif Tautan simbolik. Pada titik ini pohon direktori kita akan terlihat seperti itu:

/mnt/data/netboot ├── bios │ ├── ldlinux.C32 │ ├── libcom32.C32 │ ├── Libutil.C32 │ ├── Pxelinux.0 │ ├── Pxelinux.CFG ->… /pxelinux.CFG │ └── Vesamenu.C32 ├── BOOT │ └── AMD64 │ └── Debian │ ── 10 ├── EFI64 │ ├── ldlinux.E64 │ ├── libcom32.C32 │ ├── Libutil.C32 │ ├── Pxelinux.CFG ->… /pxelinux.CFG │ ├── Syslinux.EFI │ └── Vesamenu.C32 └── Pxelinux.CFG └── default 

Kami sekarang dapat mengonfigurasi dnsmasq.

Konfigurasikan DNSMASQ

File konfigurasi dnsmasq adalah /etc/dnsmasq.conf. Beberapa parameter yang dapat diatur di dalamnya dikomentari; Informasi lebih lanjut tentang mereka dapat ditemukan berkonsultasi dnsmasq manual. Kami hanya akan mempertimbangkan yang diperlukan untuk pengaturan kami.

Menonaktifkan fungsionalitas DNS

Hal pertama yang ingin kami lakukan adalah menonaktifkan layanan DNS yang tertanam di DNSMASQ: kami hanya membutuhkan fungsi DHCP dan TFTP yang ditawarkan oleh aplikasi. Untuk mencapai tujuan kami, kami dapat menggunakan pelabuhan Opsi: Ini digunakan untuk menentukan port apa yang harus digunakan untuk DNS; mengatur nilainya 0 menonaktifkan layanan. Kami dapat menambahkan instruksi di akhir file konfigurasi.

port = 0 

Tentukan antarmuka jaringan untuk permintaan DHCP

Hal kedua yang ingin kami lakukan adalah menentukan antarmuka jaringan yang akan digunakan untuk mendengarkan permintaan DHCP. Dalam kasus kami, antarmuka tersebut eth0, Jadi kami menulis:

antarmuka = ​​eth0 

Jika kami tidak ingin menggunakan antarmuka tertentu, kami dapat menentukan alamat IP, menggunakan Dengarkan Opsi sebagai gantinya.

Menentukan IP Range/Mode Proxy

Langkah konfigurasi ini sangat penting dan berubah tergantung pada konfigurasi jaringan kami.

Jika layanan DHCP yang disediakan oleh DNSMASQ satu satunya Di jaringan, pada langkah ini kita harus mengkonfigurasi kisaran alamat IP yang akan ditugaskan untuk klien, dan secara opsional a Waktu Sewa Misalnya:

DHCP-range = 192.168.0.100.192.168.0.200,12h 

Pada baris di atas, kisaran alamat IP yang tersedia ditentukan dengan memisahkan batas bawah dan lebih tinggi dengan koma. Dalam hal ini kami mendefinisikan rentang yang berubah dari 192.168.0.100 ke 192.168.200; Kami juga menetapkan a Waktu Sewa dari 12h.

Kasus kedua mungkin yang paling umum dalam pengaturan standar/rumah, di mana biasanya layanan DHCP disediakan oleh router. Jika ini masalahnya, DNSMASQ harus diatur untuk dijalankan dalam mode proxy untuk menghindari konflik. Dalam kasus itu, kita dapat menulis:

DHCP-range = 192.168.0.0, proxy 

Kami memasuki dua elemen yang dipisahkan oleh koma: yang pertama adalah alamat subnet (192.168.0.0), yang kedua adalah kata kunci "proxy".

Mengaktifkan server TFTP

Pada titik ini kita perlu mengaktifkan dnsmasq Server TFTP tertanam: Kami akan menggunakannya untuk melayani file yang dibutuhkan untuk klien boot. Yang harus kita lakukan untuk menyelesaikan tugas ini adalah menambahkan baris berikut ke file konfigurasi:

aktifkan-tftp 

Kita juga harus mengatur direktori yang harus digunakan sebagai root tftp. Direktori ini, seperti yang sudah kita bahas, akan meng -host file yang dibagikan. Dalam kasus kami, kami direktori ini /mnt/data/netboot (yang default adalah /var/ftpd):

tftp-root =/mnt/data/netboot 

Setel file boot berdasarkan arsitektur klien

Itu pxelinux Bootloader dapat bekerja baik dalam mode EFI dan BIOS, jadi kami harus menemukan cara untuk melayani file yang sesuai tergantung pada mode yang digunakan oleh klien. Pertanyaannya adalah, bagaimana klien mengomunikasikan informasi tersebut?

DHCP menggunakan serangkaian opsi untuk pertukaran informasi: opsi 93 (Client-Arch) digunakan untuk memberikan informasi tentang arsitektur klien. Tabel di bawah ini menampilkan nilai numerik dan string dan arsitektur yang mereka referensi:

Nilai opsi Nilai string Arsitektur
0 x86pc Intel x86pc
1 PC98 NEC/PC98
2 Ia64_efi Efi Itanium
3 Alfa DEC Alpha
4 ARC_X86 Arc x86
5 Intel_lean_client Intel Lean Client
6 Ia32_efi EFI IA32
7 Bc_efi Efi BC
8 Xscale_efi EFI XScale
9 X86-64_efi EFI x86-64

Untuk menentukan file apa yang harus disediakan untuk mode yang sesuai yang digunakan oleh klien, kami dapat menggunakan PXE-Service pilihan. Untuk x86pc kita bisa memasukkan baris berikut:

PXE-Service = x86pc, "pxelinux (bios)", bios/pxelinux 


Kami memberikan tiga nilai yang dipisahkan oleh koma untuk opsi: yang pertama adalah Jenis Sistem Klien (x86pc), yang kedua adalah Teks Menu dan yang ketiga adalah file yang akan diunduh oleh klien untuk melakukan boot. Jalur file relatif terhadap root TFTP. Dalam hal ini ditemukan di dalam bios direktori yang kami buat sebelumnya dan dipanggil pxelinux.0: Nama tersebut harus dilaporkan tanpa .0 ekstensi, seperti yang dapat Anda lihat di atas.

Untuk EFI x86-64 Mode, sebagai gantinya, kami menambahkan:

PXE-Service = x86-64_efi, "pxelinux (EFI)", EFI64/syslinux.Efi 

Pengaturan logging

Hal lain yang bermanfaat untuk diaktifkan adalah dnsmasq logging, untuk melacak aktivitas DHCP dan TFTP. Untuk menyelesaikan tugas ini, kami menambahkan Log-Queries instruksi untuk konfigurasi kami, dan atur file yang harus digunakan untuk menyimpan pesan dengan Fasilitas log petunjuk:

Log-queries Log-facility =/var/log/dnsmasq.catatan 

Simpan konfigurasi dan restart layanan

Pada titik ini konfigurasi kami akan terlihat seperti ini:

port = 0 antarmuka = ​​eth0 dhcp-range = 192.168.0.0, proxy mengaktifkan tftp tftp-root =/mnt/data/netboot pxe-service = x86pc, "pxelinux (bios)", bios/pxelinux pxe-service = x86-64_efi, "pxelinux (EFI), EFI64/SYSLINUX," SYSLINUX (EFI), EFI64/SYSLINUX, EFI64/SYS64/.EFI Log-Queries Log-Facility =/var/log/dnsmasq.catatan 

Kami dapat menyimpan perubahan yang kami buat ke /etc/dnsmasq.conf file, dan akhirnya restart dnsmasq melayani:

$ sudo systemctl restart dnsmasq 

Pengaturan Firewall

Agar pengaturan kami berfungsi dengan benar, kami juga harus mengizinkan lalu lintas yang masuk melalui firewall kami melalui beberapa port tertentu. Dalam tutorial ini saya akan menganggap penggunaan UFW paling depan. Port yang harus kita izinkan lalu lintas yang masuk adalah:

  • 67/UDP
  • 69/UDP
  • 4011/UDP

Untuk mengizinkan lalu lintas kita dapat menjalankan perintah berikut:

$ sudo ufw izinkan 67/udp $ sudo ufw izinkan 69/udp $ sudo ufw izinkan 4011/udp 

Booting

Pada titik ini, jika mesin klien terhubung ke jaringan melalui Ethernet dan opsi boot PXE dipilih sebagai "sumber" boot (pastikan fungsionalitas diaktifkan!), kita harus dapat melihat menu boot PXE:

Menu boot pxe

Setelah kami memilih AMD64 -> Debian -> Instalasi Grafis File yang sesuai akan diunduh dan penginstal Debian akan muncul:

Penginstal Grafis Debian

Sekarang mungkin untuk melanjutkan dengan instalasi.

Kesimpulan

Dalam tutorial ini kami melihat cara melakukan langkah -langkah yang diperlukan untuk mengubah Raspberry Pi di server boot PXE: kami melihat cara menginstal dan mengkonfigurasi DNSMASQ dan bootloader PXELINUX; Kami juga belajar cara membuat menu Syslinux dan struktur file yang sesuai; Akhirnya, kami melihat port apa yang harus dibuka agar pengaturan berfungsi. Keraguan? Pertanyaan? Jangan ragu untuk berkomentar dan meminta bantuan!

Tutorial Linux Terkait:

  • Cara Terhubung ke Server FTP Menggunakan Python
  • Mengatur server FTP di Linux
  • Daftar dan Instalasi Klien FTP di Ubuntu 22.04 Linux…
  • Daftar dan Instalasi Klien FTP di Ubuntu 20.04 Linux…
  • Cara mengatur server ftp/sftp dan klien di almalinux
  • OpenLitespeed sebagai proxy terbalik
  • Tutorial Konfigurasi Proxy Squid di Linux
  • Cara menjalankan raspberry pi os di mesin virtual dengan…
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Instal Tor Proxy di Ubuntu 20.04 Linux