1. IPFW 활성화

FreeBSD 커널 설정 파일에 ipfw 를 사용하기 위한 옵션들을 추가 해줍니다.

[root@yongbok ~]# cd /usr/src/sys/i386/conf/

[root@yongbok ~]# cp GENERIC Yongbok

[root@yongbok ~]# ee Yongbok

options IPFIREWALL                                      # IPFW 활성화 필수 옵션
options IPFIREWALL_VERBOSE                      # IPFW 의 syslogd(8)을 통해 로그를 출력하도록 해줍니다.
options IPFIREWALL_VERBOSE_LIMIT=100      # IPFW 의 패킷 메시지의 한도를 정해줍니다.
options IPFIREWALL_FORWARD                     # IPFW 의 패킷 전송 기능을 사용할 수 있도록 합니다.
options IPFIREWALL_DEFAULT_TO_ACCEPT  # IPFW 모든 패킷 전송을 허용합니다.
options IPDIVERT                                        # NAT 을 사용하게 해줍니다.

커널 컴파일을 합니다.

[root@yongbok ~]# cd /usr/src

[root@yongbok ~]# make buildkernel KERNCONF=Yongbok

[root@yongbok ~]# make installkernel KERNCONF=Yongbok

2. 설정 파일 수정

NAT(Network Address Translation) 을 위하여 /etc/rc.conf 파일을 수정 해줍니다.

[root@yongbok ~]# ee /etc/rc.conf

hostname=”yongbok.net”
ifconfig_fxp0=”dhcp”
ifconfig_rl0=”inet 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255″
gateway_enable=”YES”
firewall_enable=”YES”
firewall_type=”/etc/firewall.conf”
natd_enable=”YES”
natd_interface=”fxp0″
natd_flags=”-f /etc/natd.conf”

NAT을 위한 ipfw 규칙을 설정 해주기 위해 firewall.conf 를 만들어 줍니다.

[root@yongbok ~]# ee /etc/firewall.conf

# 공인 fxp0 , 내부 rl0
add divert 8668 ip from any to any via fxp0
add allow ip from any to any via rl0

포트포워딩 같은 규칙을 설정 하기위한 nat.conf 파일을 만들어 줍니다.

[root@yongbok ~]# ee /etc/natd.conf

redirect_port tcp 192.168.0.2:21 21
redirect_port tcp 192.168.0.2:80 80
use_sockets yes
same_ports yes

커널 컴파일과 위 내용을 적용하기 위해 시스템을 재시작 합니다.

[root@yongbok ~]# reboot


3. DHCP 설치

dhcpd 를 Ports 에서 설치 합니다.

[root@yongbok ~]# cd /usr/ports/net/isc-dhcp31-server && make install clean

[root@yongbok ~]# ee /etc/rc.conf
dhcpd_enable=”YES”
dhcpd_flags=”-q”
dhcpd_conf=”/usr/local/etc/dhcpd.conf”
dhcpd_ifaces=”rl0″
dhcpd_withumask=”022″

dhcpd.conf 설정 파일 추가/수정

[root@yongbok ~]# ee /usr/local/etc/dhcpd.conf

# DHCP 설정
authoritative;
Allow bootp;
# ddns-update-style 지정은 필수입니다.
ddns-update-style none;
ping-check true;
option subnet-mask 255.255.255.0;
option domain-name “kns.kornet.net”;
# IP 할당 받을시 자동으로 아래의 DNS 서버를 받아와 사용합니다.
option domain-name-servers 168.126.63.1,168.126.63.2;
# lease-time 은 할당받은 IP 임대 시간이며 초단위로 구분합니다.
# 기본값은 43200초(12시간), 최대값 129600초(36시간)
# 유동 IP에서 자주 IP가 바뀌는 것은 대게 임대시간이 초과되서 그런듯!
default-lease-time 86400;
max-lease-time 129600;
log-facility local7;
# 서브넷을 나눠서 사용 합니다.
# 아래는 기본 게이트웨이가 192.168.0.1, 192.168.0.2 ~ 192.168.0.254 C-Class 대역으로 나눠 봤습니다.
subnet 192.168.0.0 netmask 255.255.255.0 {
       range 192.168.0.2 192.168.0.254;
       option routers 192.168.0.1;
       ddns-updates off;
}
# ip 주소 예약 부분입니다.
# 랜카드의 MAC 주소를 이용하여 할당 해주며 고정 아이피를 쓸때 사용합니다.
host admin {
       hardware ethernet 00:15:f2:2c:e6:ae;
       fixed-address 192.168.0.2;
}

DHCPD 실행
내부 기본 게이트웨이로 설정된 rl0 로 dhcpd 를 실행 해줍니다.

[root@ruo91 /var/db/mysql]# /usr/local/etc/rc.d/isc-dhcpd start
Starting dhcpd.

이후 FreeBSD 서버의 두번째 랜카드(rl0)에 꼽힌 케이블을 스위칭 허브의 첫번째 포트로 링크 하고 하위 호스트들은 스위칭 허브 2번 부터 링크 하도록 해주면 됩니다.

– FreeBSD 를 사용하기 전과 사용후 네트워크 구성도

   Internet
  │
  Router
  ┌———┼———┐
 Lan1         Lan2          Lan3

   Internet
  │
  FreeBSD
  │
  Hub
  ┌———┼———┐
Lan1         Lan2          Lan3