星期四, 6月 20, 2013

FreeBSD VLAN 與 ISC DHCP Server設定

由於公司即將要搬家,我正在規劃新大樓的網路,廠商在Switch幫我設定DHCP relay,但我要自己準備DHCP Server,連忙研究一下怎麼設定,當然還是希望沿用我偏好的FreeBSD架設。

目前Google搜尋台灣第一個就是Weithenn的DHCP Server架設,我也是參考他的在改,但因為廠商有用到BOOTP,所以得加上BOOTP及我需要的domain-search選項。


VLAN設定

FreeBSD安裝很簡單,裝好後得設定VLAN (若你的Switch有設定VLAN)
先確認在 kernel有編入 VLAN 支援,若沒有的話,在 /boot/loader.conf 加上
if_vlan_load="YES" 

手動設定VLAN

設好重開後,手動測試VLAN
新增VLAN網卡語法: ifconfig {vlan-name} create
例如 #ifconfig vlan0 create

接下來得設定該VLAN網卡
語法為: ifconfig {vlan-name} {ip-address} netmask {subnet-mask} vlan {vlan-id} vlandev {physical-interface}
例如:# ifconfig vlan0 10.10.0.1 netmask 255.255.255.0 vlan 10 vlandev br0

若要刪除VLAN網卡,語法: ifconfig {vlan-name} destroy
例如:# ifconfig vlan0 destroy

測試無誤後就可以進行永久設定VLAN

設定開機啟動VLAN

在 /etc/rc.conf 裡加上
cloned_interfaces="{vlan-name}"
ifconfig_vlan0="inet {ip-address} netmask {subnet-mask} vlan {vlan-id}  vlandev {physical-interface}"
例如:
cloned_interfaces="vlan0"
ifconfig_vlan0="inet 10.10.0.1 netmask 255.255.255.0 vlan 10 vlandev br0"

安裝DHCP Server

在FreeBSD安裝沒什麼好說,進 usr/ports/net/isc-dhcp42-server ,輸入 make install clean 就好。目前Linux和FreeBSD都是用 ISC DHCP Server

設定DHCP Server

最重要的就是 DHCP Server 的設定,前言提到我的環境有多個VLAN,靠著DHCP Agent做 BOOTP relay,所以在DHCP Server 必須設定BOOTP。

 接著就開始設定 /usr/local/etc/dhcpd.conf ,裝好後就會自動把 dhcpd.conf.sample複製成 dhcpd.conf
# option definitions common to all supported networks...
option domain-name "mydomain";
option domain-name-servers 192.168.1.10, 192.168.1.20;
#原來的設定檔沒有寫domain search 怎麼做,我查了好久才知道有此選項,在
男人手冊裡並沒寫,怪哉。
#domain 尾碼搜尋 ,僅限Linux/FreeBSD/OSX等Unix有效,Windows得靠Group Policy群組原則或Registry機碼
option domain-search "domain1", "domain2";
#Windows Registry Editor Version 5.00
#[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
#"SearchList"="domain1.com,domain2.com"
#或是
#reg add HKLM\system\currentcontrolset\services\tcpip\parameters /v "SearchList" /d "domain1.com,domain2.com" /f
option domain-search "dev.local", "corp.local";
ption time-offset 28800; #本地主機時間與格林威治的時間差 (快八小時)
default-lease-time 7200; #預設 DHCP Client 的租用時間 (單位為秒)
max-lease-time 86400; #DHCP Client 的最大租用時間 (單位為秒)
ddns-update-style none; #關閉動態 DNS 功能. In the ISC implementation, this option is required.
log-facility local7; #開啟 DHCP Log 功能
#某VLAN網段,重點在 dynamic-bootp,不用bootp就可以不加
subnet 192.168.1.0 netmask 255.255.255.0 {
option broadcast-address 192.168.1.255;
range dynamic-bootp 192.168.1.100 192.168.1.200; #指定 DHCP Client IP 位址為 100 ~ 200
option routers 192.168.1.254;
} #若要分成多個檔可依此方式 #include "/usr/local/etc/dhcpd/dhcp-subnet.conf"; #無線區VLAN網段,減少lease time
subnet 192.168.10.0 netmask 255.255.255.0 {
option broadcast-address 192.168.10.255;
default-lease-time 300;
max-lease-time 1200;
range dynamic-bootp 192.168.10.10 192.168.10.200; #指定 DHCP Client IP 位址為 10 ~ 200
option routers 192.168.10.254;
} #來賓無線區VLAN網段,減少lease time
subnet 172.16.1.0 netmask 255.255.255.0 {
option broadcast-address 172.16.1.255;
default-lease-time 300;
max-lease-time 1200;
option domain-name-servers 168.95.192.1, 168.95.1.1; #因為無法access內網,把來賓的DNS指向外面
range dynamic-bootp 172.16.1.10 172.16.1.200; #指定 DHCP Client IP 位址為 10 ~ 200
option routers 172.16.1.254;
}
###固定 IP 位址 For MAC Address,印表機也可以用此法,很方便
host server2 {
hardware ethernet 00:90:FA:E8:2D:D2; #指定分配給此 MAC Address 的 DHCP Client 固定 IP
fixed-address 192.168.1.78; #指定分配給上述 MAC Address 的 DHCP Client 固定 IP 位址
}
接下來修改 /etc/rc.conf
dhcpd_enable="YES" #開機自動啟起 DHCP
dhcpd_flags="-q"    #Be quiet at startup.
dhcpd_conf="/usr/local/etc/dhcpd.conf" #DHCP 服務讀取的設定檔路徑
dhcpd_ifaces="br0" #指定 Listen DHCP Service 的網卡
dhcpd_withumask="022"
最後修改 /etc/syslog.conf ,加上一列
local7.* /var/log/dhcpd.log

以 /usr/local/etc/rc.d/isc-dhcpd start 啟動後,可以在/var/db/dhcpd/dhcpd.leases 看到租約情形,有問題時可以看 /var/log/dhcpd.log 查看。

注意: 原本的 dhcpd.conf.example 裡有一段:

# No service will be given on this subnet, but declaring it helps the # DHCP server to understand the network topology.
subnet 10.152.187.0 netmask 255.255.255.0 { 
}

這會導致DHCP無法配發,最好在裡頭加上   option broadcast-address 10.152.187.255; 就會正常。(原因我懶得追source code,設定時注意就好)

Update: 尾碼搜尋Domain Search 在RFC3397有定義Code 119的方式,但很可惜Windows DHCP Client並不支援,照這裡的討論就是不行,我也試過用Code 119的方式改ISC DHCPd,但仍然只對Unix有效,所以只用簡單的設法。所以有AD就請用Group Policy,沒有AD就加在Logon Script,用以下的registry:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"SearchList"="domain1.com,domain2.com"
或是直接下指令
reg add HKLM\system\currentcontrolset\services\tcpip\parameters /v "SearchList" /d "domain1.com, domain2.com" /f

2 則留言:

Ho Jeffher 提到...

請問一下如何在修改dhcpd.conf 之後,重新跑dhcpd 而不用重新開機呢? ^_^

Benson

Tseng Teng-Yi 提到...

Please google FreeBSD /usr/local/etc/rc.d