NAT kickstart 後處理階段

  1. 後處理沒有加入 --nochroot 選項,就是將根目錄切換到已安裝的新系統中。也就是此時所作的任何動作或命令,都是針對新安裝的系統。設定執行結果記錄在 /tmp/kspost。
    [root@dywH add]# vim nat-ks.cfg
    %post --log=/kspost
    %end
    
  2. 修改啟動選單,取消隱藏選單,修改選單抬頭。
    [root@dywH add]# vim nat-ks.cfg
    %post --log=/kspost
    sed -i 's/\(^hiddenmenu\).*$/#\1/' /boot/grub/grub.conf
    sed -i 's/\(^title De-Yu Wang\).*$/\1 -- CSIE NAT/' /boot/grub/grub.conf
    %end
    
  3. NAT 必須啟動 ip forward,才能讓內部 ip 連上 internet。
    [root@dywH add]# vim nat-ks.cfg
    %post --log=/kspost
    sed -i 's/\(^net.ipv4.ip_forward =\).*$/\1 1/g' /etc/sysctl.conf
    %end
    
  4. 由於對外網卡一定要以互動式設定,先切換到第 1 終端機,設定變數 curTTY 為目前的終端機,最後再設定腳本的 I/O 在此終端機。
    [root@dywH add]# vim nat-ks.cfg
    %post --log=/kspost
    chvt 1
    curTTY=`tty`
    exec < $curTTY > $curTTY 2> $curTTY
    %end
    
  5. 設定對內 DHCP 網卡為 eth0,對外網卡為 eth1。
    [root@dywH add]# vim nat-ks.cfg
    %post --log=/kspost
    ethdhcp='eth0'  ## Internal Network
    ethint='eth1'   ## External Network
    echo -e "# Command line options here\nDHCPDARGS=\"$ethdhcp\"" > /etc/sysconfig/dhcpd
    %end
    
  6. 對內網卡於安裝過程已自動設定,設計參數輸入迴圈,取得對外網卡參數。
    [root@dywH add]# vim nat-ks.cfg
    %post --log=/kspost
    answer="n"
    while [ x"$answer" != "xy" ] && [ x"$answer" != "xY" ] ; do
    	echo -n "enter hostname (nat): "; read hostname
    	[ "$hostname" == "" ] && hostname='nat'
    	echo -n "enter ip: "; read ip
    	echo -n "enter netmask (255.255.255.0): "; read netmask
    	[ "$netmask" == "" ] && netmask='255.255.255.0'
    	echo -n "enter default gw: "; read gw
    	echo
    
    	echo You entered:
    	echo -e "\thostname: $hostname"
    	echo -e "\tip: $ip"
    	echo -e "\tnetmask: $netmask"
    	echo -e "\tdefault gw: $gw"
    	echo -n "Is this correct? [y/n] "; read answer
    done
    %end
    
  7. 以用戶輸入且確認的參數,設定 NAT 主機及對外網卡。
    [root@dywH add]# vim nat-ks.cfg
    %post --log=/kspost
    sed -i -e 's/^\(HOSTNAME=\).*$/\1'"$hostname"'/' /etc/sysconfig/network
    cat > /etc/sysconfig/network-scripts/ifcfg-${ethint} << END
    DEVICE='eth1'
    BOOTPROTO='static'
    NM_CONTROLLED=no
    ONBOOT=yes
    IPADDR=$ip
    NETMASK=$netmask
    GATEWAY=$gw
    DNS1=163.17.3.1
    DNS2=163.17.1.1
    END
    %end
    
  8. NAT 中 dhcp 必須提供 dns,若內部不需要,也必須架設,單純為內部 ip 查詢 doamin name 進行 forward。
    [root@dywH add]# vim nat-ks.cfg
    %post --log=/kspost
    cat > /etc/named.conf << END
    // named.conf for NAT
    //
    // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
    // server as a caching only nameserver (as a localhost DNS resolver only).
    //
    // See /usr/share/doc/bind*/sample/ for example named configuration files.
    //
    
    options {
    	listen-on port 53 { any; };
    	listen-on-v6 port 53 { ::1; };
    	directory   "/var/named";
    	dump-file   "/var/named/data/cache_dump.db";
    	statistics-file "/var/named/data/named_stats.txt";
    	memstatistics-file "/var/named/data/named_mem_stats.txt";
    	allow-query	 { any; };
    	recursion yes;
    
    	dnssec-enable yes;
    	dnssec-validation yes;
    	dnssec-lookaside auto;
    
    	/* Path to ISC DLV key */
    	bindkeys-file "/etc/named.iscdlv.key";
    
    	forward only;
    	forwarders {
    		163.17.3.1;
    		168.95.1.1;
    		139.175.10.20;
    	};
    };
    END
    %end
    
  9. 設定 DHCP 參數。
    [root@dywH add]# vim nat-ks.cfg
    %post --log=/kspost
    cat > /etc/dhcp/dhcpd.conf << END
    #
    # DHCP Server Configuration file.
    #   see /usr/share/doc/dhcp*/dhcpd.conf.sample
    #   see 'man 5 dhcpd.conf'
    #
    authoritative;
    ddns-update-style none;
    
    subnet 192.168.1.0 netmask 255.255.255.0 {
    #   The following lines are standard all of the time.
    	option routers 192.168.1.254;
    	option subnet-mask 255.255.255.0;
    	option domain-name "deyu.wang";
    	option domain-name-servers 192.168.1.254,163.17.3.1,168.95.1.1;
    	default-lease-time 600;
    	max-lease-time 720;
    	range 192.168.1.100 192.168.1.199;
    	next-server 192.168.1.254;
    }
    END
    %end
    
  10. 增加校內及校外兩台 ntp server,進行校時。
    [root@dywH add]# vim nat-ks.cfg
    %post --log=/kspost
    sed -i 's/^\(server 0\)/server 163.17.1.46\nserver tock.stdtime.gov.tw\n\1/' /etc/ntp.conf
    %end
    
  11. 增加一般使用者,並設定其密碼。
    [root@dywH add]# vim nat-ks.cfg
    %post --log=/kspost
    useradd csielabnat
    passwd csielabnat
    %end
    
  12. 防火牆的設定為 NAT 主機的主角,因此為資工系電腦教室,特別撰寫設定防火牆腳本,已於安裝 nochroot 後處理階段,複製到 /usr/sbin。為提供帳號 csielabnet 可以使用 root 權限設定防火牆,必須在 sudoers 中加入此帳號為可以免密碼執行防火牆設定,特別注意﹗NOPASSWD 冒號後一定要加絕對路徑。
    [root@dywH add]# vim nat-ks.cfg
    %post --log=/kspost
    mv /etc/sysconfig/iptables /etc/sysconfig/iptables.orig
    echo "setdhcpiptables.sh $ethdhcp $ethint" >> /etc/rc.d/rc.local
    echo "csielabnat	ALL=NOPASSWD:/usr/sbin/setdhcpiptables.sh" >> /etc/sudoers
    %end
    
  13. 限制用戶 csielabnat 只能在內部網路登入,以避免老師在外部網路設定防火牆,影響正在上課的老師。
    [root@dywH add]# vim nat-ks.cfg
    %post --log=/kspost
    echo 'AllowUsers csielabnat@192.168.1.*' >> /etc/ssh/sshd_config
    %end
    
  14. 設定每天 8:00, 13:00, 18:00,防火牆設定回開放上網,以避免老師上課時限制上網的設定,延績下去,影響到下次上課的老師。
    [root@dywH add]# vim nat-ks.cfg
    %post --log=/kspost
    echo "0 8,13,18 * * * /usr/sbin/setdhcpiptables.sh $ethdhcp $ethint" >> /var/spool/cron/root
    %end
    
  15. 回到第 6 終端機圖形安裝界面,按下 reboot 重新啟動。
    [root@dywH add]# vim nat-ks.cfg
    %post --log=/kspost
    chvt 6
    %end
    
  16. nat 安裝 kickstart 設定檔下載。