Dit document beschrijft de installatie en configuratie van een PXE server onder Redhat 6.1. Het document is zowel geschikt voor Redhat 6.x, CentOS 6.x als Scientific Linux 6.x.
Ik ga in dit document uit van een minimale installatie van RedHat 6.1. Heb de setup zelf gebouwd op basis van Scientific Linux 6.1, minimale installatie (@core), uiteraard voorzien van de laatste updates.
De bedoeling is dat er een PXE server gebouwd wordt waarmee we allerlei Linux distributies, maar ook VMware en Xenserver installaties mee kunnen uitrollen. Dit document bespreekt alleen maar de configuratie van de PXE server zelf, in andere documenten ga ik in op de configuratie van datgene wat je via PXE wilt aanbieden.
Een PXE server bestaat uit een dhcp server (ik kies hier voor dnsmasq) en tftp server (ik kies hier voor tftpd). Daarnaast heb je minimaal een webserver of nfs server nodig om de installatie software aan te kunnen bieden. Verder kan een ftp server handig zijn. Aangezien dit document de basis moet vormen voor de uitrollen van allerlei omgevingen gaan we zowel een web-server, ftp-server als nfs-server installeren.
yum groupinstall "Web Server" yum groupinstall "NFS file server" yum groupinstall "FTP server" yum install dnsmasq tftp tftp-server syslinux-tftpboot
Sommigen prefereren een aantal taken 'grafisch' te doen, in dat geval kun je de voor de netwerk en firewall configuratie de volgende pakketten installeren:
yum install system-config-network-tui systemconfig-firewall-tui
Aan de webserver hoeft niet veel geconfigureerd te worden: je moet de server starten, zorgen dat dit steeds bij het booten ook gebeurd.
service httpd start chkconfig httpd on
Ook moet de firewall geconfigureerd worden zodat tcp poort 80 open staat:
iptables --insert INPUT --match state --state new \ --proto tcp --dport 80 --jump ACCEPT service iptables save
Ook de NFS server moet gestart worden, en toegevoegd worden aan het bootproces van de server:
chkconfig nfs on chkconfig rpcbind on chkconfig nfslock on service rpcbind start service nfs start service nfslock start
De firewall configuratie is iets ingewikkelder, allereerst moet je de NFS server vertellen welke poorten gebruikt moeten gaan worden. Dit doe je in het bestand /etc/sysconfig/nfs, door het commentaar teken voor de volgende regels te verwijderen:
RQUOTAD_PORT=875 LOCKD_TCPPORT=32803 LOCKD_UDPPORT=32769 MOUNTD_PORT=892 STATD_PORT=662 STATD_OUTGOING_PORT=2020
En hierna de nfs server te herstarten:
service nfs restart
Vervolgens kun je firewall rules aanmaken:
iptables --insert INPUT --match state --state new \ --match multiport --proto tcp --dport 111,662,875,892,2049,32803 \ --jump ACCEPT iptables --insert INPUT --match state --state new \ --match multiport --proto udp --dport 111,662,875,892,2049,32769 \ --jump ACCEPT service iptables save
Ook SELinux moet verteld worden dat je NFS gebruikt:
setsebool -P nfs_export_all_rw 1
De NFS server maakt gebruik van zogenaamde tcp wrappers voor access control. Dat houdt in dat je in het bestand /etc/hosts.allow de volgende regels moet opnemen:
portmap:ALL lockd:ALL mountd:ALL rquotad:ALL statd:ALL
Uiteraard kun je in plaats van ALL ook een ip adres of ipranges opgeven.
Redhat gebruikt vsftpd, met het bijbehorende configuratie bestand /etc/vsftpd/vsftpd.conf. Hierin hoeven in principe geen configuratie wijzigingen te gebeuren: bij een deployment server volstaat anonymous ftp (inloggen op een ftp server zonder dat hiervoor een gebruikersnaam en wachtwoord vereist zijn).
Starten van vsftpd en toevoegen aan het bootproces:
chkconfig vsftpd on service vsftpd start
Firewall aanpassen:
iptables --insert INPUT --match state --state new \ --proto tcp --dport 21 --jump ACCEPT service iptables save
Verder moet het bestand /etc/sysconfig/iptables-config aangepast worden:
IPTABLES_MODULES="nf_conntrack_ftp"
De firewall moet nu geherstart worden:
service iptables restart
De tftp-server draait niet stand-alone, maar maakt gebruik van Xinetd. Om de tftp-server in gebruik te nemen moet je eerst de service enablen door in het bestand: /etc/xinetd.d/tftp, de parameter: disable de parameter no mee te geven in plaats van de default yes. Ook moet de directory aangepast worden waar de bestanden staan:
server_args = -s /tftpboot
Xinetd zelf in gebruik nemen:
chkconfig xinetd on service xinetd start
Firewall configuratie:
iptables --insert INPUT --match state --state new \ --proto udp --dport 69 --jump ACCEPT service iptables save
Net zoals NFS maakt de tftp-server gebruik van tcpwrappers. Voeg aan het bestand /etc/hosts.allow de regel toe:
tftpd:ALL
Ook nu moet het bestand /etc/sysconfig/iptables-config aangepast worden:
IPTABLES_MODULES="nf_conntrack_ftp nf_conntrack_tftp"
De firewall moet opnieuw geherstart worden:
service iptables restart
Dnsmasq wordt gebruikt als dhcp server, ik ga in dit document verder niet op de dns en dhcp specifieke zaken, maar beperk me tot wat nodig is voor PXE boot. Zorg voor de volgende opties in /etc/dnsmasq.conf:
dhcp-option-force=208,f1:00:74:7e dhcp-boot:pxelinux.0,boothost,192.168.0.1
Het ip adres in de tweede regel is het ip adres van deze deployment server.
Dnsmasq in gebruik nemen:
chkconfig dnsmasq on service dnsmasq start
Firewall configuratie:
iptables --insert INPUT --match state --state new \ --proto udp --dport 67 --jump ACCEPT service iptables save
De deployment server is klaar voor gebruik !