Ubuntu 14.04 LTS Server 安裝 dnsmasq DHCP Server

dnsmasq 也是一套 DHCP Server,除此之外,也可以用來做為 caching DNS proxy 和 TFTP Server。

參考網頁:Dnsmasq – Community Help Wiki

1. 查詢 dnsmasq套件相關訊息
$ sudo apt-cache search dnsmasq | grep ^dnsmasq
dnsmasq-base – Small caching DNS proxy and DHCP/TFTP server
dnsmasq-utils – Utilities for manipulating DHCP leases
dnsmasq – Small caching DNS proxy and DHCP/TFTP server

2. 進行安裝
$ sudo apt-get install  dnsmasq dnsmasq-utils -y
[@more@]3. 備份原設定檔
$ sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.$(date +%F)

4. 修改設定檔
$ sudo vim /etc/dnsmasq.conf
domain-needed
bogus-priv
local=/computerclassroom.tces.ilc.edu.tw/
expand-hosts
domain=computerclassroom.tces.ilc.edu.tw
interface=eth1
dhcp-range=eth1,192.168.5.1,192.168.5.200,12h
listen-address=127.0.0.1
server=168.95.1.1
server=140.111.66.1
log-queries
log-dhcp

5. 執行 dnsmasq 服務
$ sudo service dnsmasq start
 * Starting DNS forwarder and DHCP server dnsmasq                                    [ OK ]

6. 檢查是否有正常啟動
$ netstat -au | grep :bootps
udp        0      0 *:bootps                *:*

感覺 dnsmasq 的設定比較簡單,但比較沒有辦法像 isc-dhcp-server 一樣做到比較細微的設定,如:針對某一台電腦給予固定的 IP。

移除 dnsmasq
$ sudo apt-get remove –purge dnsmasq dnsmasq-base dnsmasq-utils libmnl0 libnetfilter-conntrack3

Ubuntu 14.04 LTS Server 安裝 DHCP Server

1. 安裝 DHCP Server 套件
$ sudo apt-get install isc-dhcp-server -y

2. 進行設定,指定發送 IP  的網路卡
$ sudo sed -i ‘s/INTERFACES=””/INTERFACES=”eth1″/’ /etc/default/isc-dhcp-server
[@more@]3. 修改設定檔 /etc/dhcp/dhcpd.conf
$ sudo vim /etc/dhcp/dhcpd.conf
列出 DHCP Server 設定
$ sudo cat /etc/dhcp/dhcpd.conf | egrep -v ‘^$|^#’
ddns-update-style none;
option domain-name “computerclassroom.tces.ilc.edu.tw”;
option domain-name-servers 168.95.1.1, 140.111.66.1;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.5.0 netmask 255.255.255.0 {
  range 192.168.5.201 192.168.5.205;
  option domain-name-servers 168.95.1.1, 140.111.66.1;
  option domain-name “computerclassroom.tces.ilc.edu.tw”;
  option routers 192.168.5.254;
  option broadcast-address 192.168.5.255;
  default-lease-time 600;
  max-lease-time 7200;
}
host windows81 {
   hardware ethernet 00:1e:90:48:c8:8b;
   fixed-address 192.168.5.201;
}
host windows7 {
   hardware ethernet 00:1e:90:47:fa:78;
   fixed-address 192.168.5.202;
}

4. 啟動 DHCP Server
$ sudo service isc-dhcp-server start
isc-dhcp-server start/running, process 3524

5. 檢查是否有正常啟動
# netstat -anu | grep :67
udp        0      0 0.0.0.0:67              0.0.0.0:*

# lsof -i :67
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dhcpd   30687 dhcpd    7u  IPv4 360732      0t0  UDP *:bootps

6. 設定開機時啟動 DHCP Server
# update-rc.d isc-dhcp-server defaults
 Adding system startup for /etc/init.d/isc-dhcp-server …
   /etc/rc0.d/K20isc-dhcp-server -> ../init.d/isc-dhcp-server
   /etc/rc1.d/K20isc-dhcp-server -> ../init.d/isc-dhcp-server
   /etc/rc6.d/K20isc-dhcp-server -> ../init.d/isc-dhcp-server
   /etc/rc2.d/S20isc-dhcp-server -> ../init.d/isc-dhcp-server
   /etc/rc3.d/S20isc-dhcp-server -> ../init.d/isc-dhcp-server
   /etc/rc4.d/S20isc-dhcp-server -> ../init.d/isc-dhcp-server
   /etc/rc5.d/S20isc-dhcp-server -> ../init.d/isc-dhcp-server

快速產生 DHCP Server 的 dhcpd.conf 格式檔

從 /var/lib/dhcpd/dhcpd.leases 取出要的網路卡卡號
# cat /var/lib/dhcpd/dhcpd.leases | grep hard | awk ‘{print $3}’
d0:df:c7:f9:5c:ef;
00:26:51:0d:53:40;
00:11:93:88:7a:00;
00:15:58:6b:7d:da;
00:15:58:6b:7d:da;
00:15:58:6b:7d:da;
00:15:58:6b:7d:da;

經過處理,只取出想要的部分
# cat /var/lib/dhcpd/dhcpd.leases | grep hard | awk ‘{print $3}’ | sed ‘s/.$//’ | sort | uniq
00:11:93:88:7a:00
00:15:58:6b:7d:da
00:26:51:0d:53:40
d0:df:c7:f9:5c:ef

整理完的資料檔
# cat /root/mac
server1,00:11:93:88:7a:00,192.168.1.11
server2,00:15:58:6b:7d:da,192.168.1.12
server3,00:26:51:0d:53:40,192.168.1.13
server4,d0:df:c7:f9:5c:ef,192.168.1.14
[@more@]
使用 awk
# cat /usr/local/bin/mkdhcpd
#!/bin/bash
cat /root/mac | awk -F”,” ‘BEGIN{OFS=” “}{print $1,$2,$3 }’ | while read i j k
do
   echo “host $i {“
   echo ”  hardware ethernet $j;”
   echo ”  fixed-address $k;”
   echo “}”
done

使用 sed
# cat /usr/local/bin/mkdhcpd
#!/bin/bash
cat /root/mac | sed ‘s/,/ /g’ | while read i j k
do
   echo “host $i {“
   echo ”  hardware ethernet $j;”
   echo ”  fixed-address $k;”
   echo “}”
done

測試
# sh /usr/local/bin/mkdhcpd
host server1 {
  hardware ethernet 00:11:93:88:7a:00;
  fixed-address 192.168.1.11;
}
host server2 {
  hardware ethernet 00:15:58:6b:7d:da;
  fixed-address 192.168.1.12;
}
host server3 {
  hardware ethernet 00:26:51:0d:53:40;
  fixed-address 192.168.1.13;
}
host server4 {
  hardware ethernet d0:df:c7:f9:5c:ef;
  fixed-address 192.168.1.14;
}

由 DHCP Server 的動態 IP 轉成固定 IP – Linux Server 篇

Linux 安裝完成之後,如果沒有在手動或自動安裝中設定好網路組態,通常就要手動設定網路,但如果是用由 DHCP Server 自動取得 IP,會節省許多的時間,但如果是 Server 的話,還是使用固定 IP 會比較好。[@more@]
底下文章內容取自:HowTos/NetworkInstallServer – CentOS Wiki
1. 建立 Script 檔
# vim /usr/local/bin/set_static_ip
#!/bin/bash
echo “Converting DHCP scope to static IP address”

DEVICE=`route -n|grep ‘^0.0.0.0’|awk ‘{print $8}’`
IPADDR=`ifconfig $DEVICE|grep ‘inet addr:’|awk ‘{sub(/addr:/,””); print $2}’`
NETMASK=`ifconfig $DEVICE|grep ‘Mask’|awk ‘{sub(/Mask:/,””); print $4}’`
NETWORK=`ipcalc $IPADDR -n $NETMASK|awk -F= ‘{print $2}’`
GATEWAY=`route -n|grep ‘^0.0.0.0’|awk ‘{print $2}’`
HWADDR=`ifconfig $DEVICE|grep ‘HWaddr’|awk ‘{print $5}’`
HOSTNAME=`hostname`

cat <<EOF >/etc/sysconfig/network
NETWORKING=yes
HOSTNAME=$HOSTNAME
GATEWAY=$GATEWAY
EOF

cat <<EOF >/etc/sysconfig/network-scripts/ifcfg-$DEVICE
DEVICE=$DEVICE
BOOTPROTO=static
IPADDR=$IPADDR
NETMASK=$NETMASK
ONBOOT=yes
HWADDR=$HWADDR
EOF

2. 賦予執行權限
# chmod 700 /usr/local/bin/set_static_ip

3. 執行
# /usr/local/bin/set_static_ip

4. 觀看成果
# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=test.tces.ilc.edu.tw
GATEWAY=192.168.1.254

# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.6
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=6C:62:6D:61:80:81

建立 PXE Server 透過網路安裝 Linux

原本自己在安裝 Linux 時,都是自己客製化 Linux,挑選要安裝的套件,並做一些系統的調整後,做成 ISO 光碟,然後利用卡碟機來安裝,雖然很方便,但如果有同時多台要安裝,就會有些麻煩,所以想要利用 PXE(Preboot Execution Environment)  的功能,直接從網路上下載來安裝,另外一方面,現在的電腦主機絕大部分都有支援從 PXE 網路開機的功能,只不過在 BIOS 中預設是關閉的,只要打開就可以了![@more@]底下文章參考 鳥哥的 Linux 私房菜 — 安裝伺服器與 kickstart 和 CentOS 6 PXE Server Install (DHCP+TFTP+HTTP(FTP)+Kickstart) – ghoseliang- 點部落 完成

安裝 PXE Server 的方式
1. 安裝 DHCP Server
# yum install dhcp

2. 設定 DHCP Server
# vim /etc/dhcp/dhcpd.conf
Authoritative;
default-lease-time                      259200;
max-lease-time                          518400;
option routers                          192.168.1.254;
option broadcast-address                192.168.1.255;
option subnet-mask                      255.255.255.0;
option domain-name-servers              140.111.66.10,168.95.1.1,8.8.8.8;
ddns-update-style                       none;
server-name                             pxe;

subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.61 192.168.1.65;
    option subnet-mask                  255.255.255.0;
    option domain-name                  “pxe.tces.edu”;
    next-server 192.168.1.6;
    filename “pxelinux.0”;

}

3. 啟動 DHCP Server,並設定成開機時啟動
# chkconfig –level 3 dhcpd on
# service dhcpd start
正在啟動 dhcpd:                                           [  確定  ]
檢查 DHCP Server 是否有正常執行
# netstat -antulp | grep dhcp
udp        0      0 0.0.0.0:67                  0.0.0.0:*                               5526/dhcpd

4. 安裝 tftp Server
# yum install tftp-server tftp

5. 修改 /etc/xinetd.d/tftp
# vim /etc/xinetd.d/tftp
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

6. 啟動 tftp 服務
# /etc/init.d/xinetd start
正在啟動 xinetd:                                          [  確定  ]
# chkconfig –level 3 xinetd on
# chkconfig –level 3 tftp on
# netstat -antulp | grep xinetd
udp        0      0 0.0.0.0:69                  0.0.0.0:*                               5595/xinetd

7. 安裝 syslinux 套件
# yum install syslinux

8.複製設定檔到 /var/lib/tftpboot 目錄
# cp /usr/share/syslinux/menu.c32  /var/lib/tftpboot
# cp /usr/share/syslinux/vesamenu.c32 /var/lib/tftpboot
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
# cp /usr/share/syslinux/memdisk /var/lib/tftpboot
# cp /usr/share/syslinux/mboot.c32 /var/lib/tftpboot
# cp /usr/share/syslinux/chain.c32 /var/lib/tftpboot

9. 建立 /var/lib/tftpboot/pxelinux.cfg 目錄,用來存放 PXE 開機時 Client 端的一些設定
# mkdir /var/lib/tftpboot/pxelinux.cfg

10. 下載 Linux ISO 光碟,並掛載
建立掛載目錄
# mkdir -p /mnt/{x86_64,i386}
掛載 ISO 檔
# mount -o loop /var/ftp/pub/CentOS-6.5-x86_64-bin-DVD1.iso /mnt/x86_64
# mount -o loop /var/ftp/pub/CentOS-6.5-i386-bin-DVD1.iso /mnt/i386

11.  建立支援 HTTP 安裝的目錄,並複製 ISO 檔光碟的檔案
# mkdir -p /var/www/html/CentOS/6.5/os/{x86_64,i386}
# cp -ra /mnt/x86_64/* /var/www/html/CentOS/6.5/os/x86_64
# cp -ra /mnt/i386/* /var/www/html/CentOS/6.5/os/i386
如果系統有啟動 SELinux,要多執行下面的動作
# restorecon -R -v /var/www/html

12. 建立支援 FTP 安裝的目錄
# ln -s /var/www/html/CentOS /var/ftp
如果系統有啟動 SELinux,要多執行下面的動作
# restorecon -r /var/ftp
# setsebool -P ftp_home_dir=1
# setsebool -P allow_ftpd_full_access on

13. 建立 PXE 開機所須的目錄,並複製開機檔案到對應的目錄
# mkdir -p /var/lib/tftpboot/images/CentOS/6.5/{x86_64,i386}
# cp /mnt/x86_64/images/pxeboot/vmlinuz /var/lib/tftpboot/images/CentOS/6.5/x86_64
# cp /mnt/x86_64/images/pxeboot/initrd.img /var/lib/tftpboot/images/CentOS/6.5/x86_64
# cp /mnt/i386/images/pxeboot/vmlinuz /var/lib/tftpboot/images/CentOS/6.5/i386
# cp /mnt/i386/images/pxeboot/initrd.img /var/lib/tftpboot/images/CentOS/6.5/i386

建立 PXE 開機的開機選單
# vim /var/lib/tftpboot/pxelinux.cfg/default
UI vesamenu.c32
TIMEOUT 300
DISPLAY ./boot.msg
MENU TITLE Welcom to Tou-Cheng Elementary School PXE Server System

LABEL local
  MENU LABEL Boot from local drive
  MENU DEFAULT
  localboot 0

LABEL Install CentOS 6.5 x86_64 from FTP
  MENU LABEL Install CentOS 6.5 x86_64 from FTP
  kernel images/CentOS/6.5/x86_64/vmlinuz
  append initrd=images/CentOS/6.5/x86_64/initrd.img method=ftp://192.168.1.6/CentOS/6.5/os/x86_64/

LABEL Install CentOS 6.5 x86_64 from HTTP
  MENU LABEL Install CentOS 6.5 x86_64 from HTTP
  kernel images/CentOS/6.5/x86_64/vmlinuz
  append initrd=images/CentOS/6.5/x86_64/initrd.img method=http://192.168.1.6/CentOS/6.5/os/x86_64/

  建立 PXE 開機的 boot.msg 開機訊息
# vim /var/lib/tftpboot/boot.msg
Welcom to Tou-Cheng Elementary School PXE Server System

The 1st menu can let you system goto hard disk menu.
The 2st menu can goto interactive installation step.