2015/10/05

DDNS + DHCPd

Introduccion:

Instalar un servidor DDNS que sera actualizado desde el servidor DHCPd.

Requerimientos:

* FreeBSD instalado
* Conexion a Internet
* Leer este tutorial

Proceso:
(pendiente, pero los comandos y los archivos son validos para poner a funcionar todo)

Comandos usados:

# bsdconfig
# passwd
# freebsd-update fetch
# freebsd-update install
# portsnap fetch extract
# portsnap fetch update
# cd /usr/ports/dns/bind910
# make config-recursive
# make install clean
# rndc-confgen -a
wrote key file "/usr/local/etc/namedb/rndc.key"
# cd /usr/ports/net/isc-dhcp43-server
# make config-recursive
# make install clean

Por un tema de cambio de rutas en FreeBSD 8.2 y FreeBSD 10.2 creo un link simple
# ln -s /usr/local/etc/namedb/ /etc/namedb

Ajusto y/o creo los siguientes archivos

------------------------------------------------------------------------------------------------------------------------------------
# cat /etc/rc.conf

hostname="alpha.samdom.dominio.com"

# Servicio SSH
sshd_enable="YES"

# Primera tarjeta de red (INTERNET)
ifconfig_em0="inet 192.168.16.22 netmask 255.255.240.0"
defaultrouter="192.168.16.1"

# Segunda tarjeta de red (LAN)
ifconfig_em1="inet 172.16.100.1 netmask 255.255.0.0"

# NTP
ntpd_enable="YES"
ntpd_config="/etc/ntp.conf"

# ISC-DHCPd Server
dhcpd_enable="YES"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_ifaces="em1"

# ISC BIND
named_enable="YES"

# Activamos OpenBSD Packet Filter (PF)
pf_enable="YES"                 # Enable PF (load module if required)
pf_rules="/etc/pf.conf"         # rules definition file for pf
pf_flags=""                     # additional flags for pfctl startup
pflog_enable="YES"              # start pflogd(8)
pflog_logfile="/var/log/pflog"  # where pflogd should store the logfile
pflog_flags=""                  # additional flags for pflogd startup
gateway_enable="YES"            # Enable as LAN gateway (PF)

# Network Information System (NIS)
# NIS Master Server
nisdomainname="samdom.dominio.com"
nis_server_enable="YES"
nis_yppasswdd_enable="YES"
nis_client_enable="YES"
nis_client_enable="YES" # run client stuff as well
nis_client_flags="-S NIS domain,server"

# IPv6
#ipv6_activate_all_interfaces="YES"
ifconfig_em1_ipv6="inet6 2001:0db8:1000:8b00::2 prefixlen 64"
ipv6_defaultrouter="2001:0db8:1000:8b00::1"

------------------------------------------------------------------------------------------------------------------------------------
# cat /etc/ntp.conf

# Associate to the public NTP pool servers
server 0.pool.ntp.org prefer
server 1.pool.ntp.org
server 2.pool.ntp.org
server 3.pool.ntp.org

# Location of drift file
driftfile /var/db/ntp.drift

# Location of the log file
logfile /var/log/ntpd

# Restrictions
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
restrict 127.127.1.0

------------------------------------------------------------------------------------------------------------------------------------
# cat resolv.conf

# Generated by resolvconf
#nameserver 192.168.16.1
#nameserver 192.168.16.8

# FreeBSD DNS
search samdom.dominio.com
#nameserver 2001:4860:4860::8888
#nameserver 2001:4860:4860::8844
#nameserver 8.8.8.8
#nameserver 8.8.4.4
nameserver 127.0.0.1

------------------------------------------------------------------------------------------------------------------------------------
# cat /usr/local/etc/namedb/named.conf

Google Drive

------------------------------------------------------------------------------------------------------------------------------------
# cat /usr/local/etc/namedb/dynamic/samdom.dominio.com

Google Drive

------------------------------------------------------------------------------------------------------------------------------------
# cat /usr/local/etc/namedb/dynamic/16.172.in-addr.arpa

Google Drive

------------------------------------------------------------------------------------------------------------------------------------
# cat /usr/local/etc/dhcpd.conf

Google Drive

------------------------------------------------------------------------------------------------------------------------------------
# cat /etc/pf.conf

Google Drive

------------------------------------------------------------------------------------------------------------------------------------
# touch /var/log/ntpd
# /usr/local/etc/rc.d/named start
# /usr/local/etc/rc.d/isc-dhcpd start
# shutdown -r now

# rndc status
version: BIND 9.9.8 (Extended Support Version) <id:2d6d4ba>
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 163
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

Para poder editar mis archivos de zonas hay que congelarlos con:

# rndc freeze samdom.dominio.com
# rndc freeze 16.172.in-addr.arpa

Luego de editarlos (recordar actualizar el serial "2015100101" de cada uno) descongelarlos con:

# rndc thaw samdom.dominio.com
# rndc thaw 16.172.in-addr.arpa

2015/02/06

Instalar fuentes en FreeBSD

Introduccion:

Instalar fuentes adicionales en FreeBSD.

Requerimientos:

* FreeBSD instalado
* The X Window System instalado

* Leer este tutorial

El proceso:

Type1 Fonts

# cd /usr/ports/x11-fonts/urwfonts
# make install clean

# edit /etc/X11/xorg.conf

Agregamos al final la linea FontPath     "/usr/local/lib/X11/fonts/urwfonts/", se ve asi:

Section "Files"
        ModulePath   "/usr/local/lib/xorg/modules"
...
        FontPath     "/usr/local/lib/X11/fonts/75dpi/"
        FontPath     "/usr/local/lib/X11/fonts/urwfonts/"


Para cargar las nuevas fuentes sin reiniciar las X, ejecutamos desde la cuenta del usuario

$ xset fp+ /usr/local/lib/X11/fonts/urwfonts
$ xset fp rehash

TrueType® Fonts

# edit /etc/X11/xorg.conf

Agregamos al final la linea FontPath     "/usr/local/lib/X11/fonts/TrueType/", se ve asi:

Section "Files"
        ModulePath   "/usr/local/lib/xorg/modules"
...
        FontPath     "/usr/local/lib/X11/fonts/urwfonts/"
        FontPath     "/usr/local/lib/X11/fonts/TrueType/"

Agregamos al final la linea Load  "freetype", se ve asi:

Section "Module"                              
...
        Load  "dri2"                          
        Load  "freetype"

# mkdir /usr/local/lib/X11/fonts/TrueType

# cd /usr/ports/x11-fonts/ttmkfdir
# make install clean

Copiar las fuentes al directorio /usr/local/lib/X11/fonts/TrueType

# cp /usr/home/jdoe/*.ttf /usr/local/lib/X11/fonts/TrueType

Luego las hacemos compatibles con FreeBSD

# cd /usr/local/lib/X11/fonts/TrueType
# ttmkfdir -o fonts.dir

Para cargar las nuevas fuentes sin reiniciar las X, ejecutamos desde la cuenta del usuario

$ xset fp+ /usr/local/lib/X11/fonts/TrueType
$ xset fp rehash

2014/12/01

Dispositivos USB

Introduccion:

Montar memorias USB en FreeBSD
El usuario root no tiene problemas para montar un dispositivo USB mediante el comando

Ver el dispositivo detectado por el sistema
   # dmesg
   # camcontrol devlist

Montar el dispositivo detectado
   # mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt

Este tutorial explica como permitir que los usuarios no-root puedan montar dispositivos USB.

Requerimientos:

* Acceso a root
* Leer este tutorial

Tutoriales:

https://www.freebsd.org/doc/handbook/usb-disks.html
http://www.codebuddies.de/2014/03/28/0x0b-howto-mount-a-extfat-filesystem-on-freebsd
https://forums.freebsd.org/threads/mount-exfat-fuse-as-regular-user.46985
http://olivier.cochard.me/bidouillage/installation-et-configuration-de-freebsd-comme-poste-de-travail
http://blog.desdelinux.net/freebsd-que-hacer-despues-instalar
https://forums.freebsd.org/threads/formatting-a-usb-stick.10986
http://www.freebsdonline.com/content/view/890/524
http://bsdgurl.net/text/formatting-external-disk-to-fat32.txt

El proceso:

Agregamos nuestro usuario john al grupo operator


# pw groupmod operator -m john

# edit /etc/devfs.rules

# USB Storage Devices
[localrules=5]
add path 'da*' mode 0660 group operator

# edit /etc/rc.conf

# USB Storage Devices          
devfs_system_ruleset="localrules"

# edit /etc/sysctl.conf

# USB Storage Devices
vfs.usermount=1

# sysctl vfs.usermount=1

# service devfs restart

# mkdir /mnt/usb

# chown john:john /mnt/usb

# camcontrol devlist
<Generic Flash Disk 5.00>          at scbus10 target 0 lun 0 (da0,pass7)

% ls /dev/da0*
/dev/da0s1

% mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/usb

% umount /mnt/usb

Para facilitar el montar y desmontar la memoria, se puede usar el siguiente scirpt:

$ edit ~/Desktop/USB-Key.sh

#!/bin/sh

if [ "$(df -h | grep '/mnt/usb' | cut -d ' ' -f1)"  != '/dev/da0s1' ]; then
  echo 'Montando memoria'
  mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/usb
  dolphin /mnt/usb > /dev/null 2>&1
else
  echo 'Desmontando memoria'
  killall dolphin
  umount /mnt/usb
fi

Si necesitamos formatear el dispositivo USB (no debe estar montado)

Then we clean the drive (remove previous partition):

  # dd if=/dev/zero of=/dev/da0 bs=1m

Then we will create the slice:
  # fdisk -i da0
 
    Do you want to change our idea of what BIOS thinks ? [n]  Press Enter
    Do you want to change it?[n] Press Enter
    Do you want to change it?[n] Press Enter
    Do you want to change it?[n] Press Enter
    Do you want to change it?[n] Press Enter
    Do you want to change the active partition? [n] Press Enter
 
    Should we write new partition table? [n] Press y

Then we will create the FAT32 file system:

  # newfs_msdos -F32 /dev/da0s1

2014/06/20

LG Nexus 5 LG-D820 y LG-D821 Factory Images

Introduccion:

En este tutorial se enseña a flashear nuestro equipo LG Nexus 5, para el modelo LG-D820 que se comercializa para USA y para el modelo LG-D821 que se comercializa para Europa, con las imagenes de fabrica que proporciona Google.

Se pueden consultar las ultimas imagenes de fabrica en este lugar
https://developers.google.com/android/nexus/images

El proceso de flasheo no es complicado, pero requiere de unos conocimientos minimos para hacerlo, si usted no sabe que es un Terminal o si no tiene la paciencia para seguir este tutorial paso a paso, es mejor que pase de el y espere que la actualizacion le llegue mediante OTA (Over-The-Air) automaticamente en unas semanas.

Flashear un Nexus 5 es relativamente seguro, pero nada en la vida sera 100% seguro, si usted sigue este manual es bajo su propio riesgo entendiendo que existe un minimo de peligro de dañar su querido Nexus y puede tener que enviarlo al centro de servicio si algo sale mal.

Este proceso borrara todo el contenido de su Nexus 5, por favor haga una copia del contenido importante primero (fotos, contactos, etc.).

Para nuestro tutorial usaremos un equipo de Apple MAC con OS X, las imagenes de fabrica tambien se pueden flashear en computadores con Windows, pero yo prefiero hacerlo en un MAC ya que es mas facil al no tener que descargar drivers y otras cosas.

En este tutorial se uso la ultima version de la imagen de fabrica de Android 4.4.4, pero tambien se puede usar para versiones mas nuevas ajustando las rutas de descarga y los nombres de directorios.

Todo el proceso se hara, como explico usando un MAC, mediante el Terminal, mi intencion es que usando el terminal usted simplemente debe copiar los comandos y pegarlos en el Terminal de su computador y dar enter, pero recuerde que si esta intentando usar este manual con una version superior de Android a la 4.4.4, debe actualizar los links y los nombres de los directorios.

Requerimientos:

* Un computador Apple con OS X.
* Conexion a Internet.
* Un Nexus 5 de cualquiera de los dos modelos existentes (LG-D820 o LG-D821).
* El cable original USB de su equipo o uno compatible.

Actualizado (2014/11/12) para Android 5.0 (LRX21O)

Opcion 1. El proceso automatizado mediante un script:

Para hacer el proceso de una forma mas facil, he creado un script que ejecuta los comandos paso a paso, pero esta en desarrollo en estos momentos, aqui lo puede descargar desde Google Drive -> hammerhead.sh, para usarlo lo debe descargar al escritorio de su computador, luego se va al Terminal que se encuentra en Finder / Applications / Utilities / Terminal.

Debe ejecutar el script asi (ajuste el comando al nombre del script):
$ chmod +x ~/Desktop/hammerhead.sh
$ ~/Desktop/hammerhead.sh

y seguir las instrucciones del script.

Script actualizado (2014/11/12) para Android 5.0 (LRX21O)

Opcion 2. El proceso manual paso a paso:

Finder / Applications / Utilities / Terminal

1) Entrar al directorio
$ cd ~/Desktop

2) Descargar el archivo de imagen

Para Android 4.4.4 (KTU84P) use
$ curl -o hammerhead.tgz https://dl.google.com/dl/android/aosp/hammerhead-ktu84p-factory-35ea0277.tgz

Para Android 5.0 (LRX21O) use
$ curl -o hammerhead.tgz https://dl.google.com/dl/android/aosp/hammerhead-lrx21o-factory-01315e08.tgz

3) Verificar el md5sun del archivo (comparelo con el de la web)
$ md5 ~/Desktop/hammerhead.tgz

4) Verificar el sha-1 del archivo (comparelo con el de la web)
$ openssl sha1 ~/Desktop/hammerhead.tgz

5) Descomprimir el archivo
$ tar -xvzf ~/Desktop/hammerhead.tgz

6) Cambiar el nombre del directorio

Para Android 4.4.4 (KTU84P) use
$ mv hammerhead-ktu84p hammerhead

Para Android 5.0 (LRX21O) use
$ mv hammerhead-lrx21o hammerhead

7) Modificar flash-all.sh para incluir el path ~/Desktop/hammerhead/
$ sed -i '' 's/fastboot/~\/Desktop\/hammerhead\/fastboot/g' ~/Desktop/hammerhead/flash-all.sh

8) Descargar el fastboot que esta en el ADT Bundle
$ curl -o adt-bundle-mac-x86_64.zip https://dl.google.com/android/adt/adt-bundle-mac-x86_64-20140702.zip

9) Descomprimir el adt-bundle-mac-x86_64.zip
$ unzip adt-bundle-mac-x86_64.zip

10) Copiar el adb al directorio hammerhead
$ cp ~/Desktop/adt-bundle-mac-x86_64-20140702/sdk/platform-tools/adb ~/Desktop/hammerhead


11) Darle permisos de ejecucion al adb
$ chmod +x ~/Desktop/hammerhead/adb

12) Copiar fastboot al directorio hammerhead
$ cp ~/Desktop/adt-bundle-mac-x86_64-20140702/sdk/platform-tools/fastboot ~/Desktop/hammerhead

13) Darle permisos de ejecucion al fastboot
$ chmod +x ~/Desktop/hammerhead/fastboot

14) Conectar el Nexus 5 al Mac con el cable original USB o uno compatible

15) Reiniciar el Nexus 5 en "FASTBOOT MODE"
$ ~/Desktop/hammerhead/adb reboot bootloader

Nota:
Tambien se puede hacer manualmente al encender el Nexus 5 manteniendo presionadas las teclas Volumen abajo + Volumen arriba + boton encender simultaneamente.

Veremos en rojo el titulo

FASTBOOT MODE
...
LOCK STATE - locked <- en color negro!

16) Desbloquear el bootloader
$ ~/Desktop/hammerhead/fastboot oem unlock

En el terminal veremos algo como esto:
...
OKAY [101.578s]
finished. total time: 101.578s

Veremos un titulo Unlock bootloader?

Para confirmar

Volumen arriba + boton encender

Luego de unos 10 segundos, veremos

LOCK STATE - unlocked  <- en color rojo!

17) Entrar al directorio hamerhead
$ cd ~/Desktop/hammerhead

18) Ahora iniciamos la instalacion de la imagen de fabrica
$ ~/Desktop/hammerhead/flash-all.sh

En el terminal veremos algo como esto:

sending 'bootloader' (2508 KB)...
OKAY [  0.187s]
writing 'bootloader'...
OKAY [  0.474s]
finished. total time: 0.661s
rebooting into bootloader...
OKAY [  0.099s]
finished. total time: 0.099s
sending 'radio' (45409 KB)...
OKAY [  1.539s]
writing 'radio'...
OKAY [  3.112s]
finished. total time: 4.651s
rebooting into bootloader...
OKAY [  0.092s]
finished. total time: 0.092s
archive does not contain 'boot.sig'
archive does not contain 'recovery.sig'
archive does not contain 'system.sig'
--------------------------------------------
Bootloader Version...: HHZ11k
Baseband Version.....: M8974A-2.0.50.1.16
Serial Number........: 06a9bccg002be57a
--------------------------------------------
checking product...
OKAY [  0.100s]
checking version-bootloader...
OKAY [  0.100s]
checking version-baseband...
OKAY [  0.100s]
sending 'boot' (8700 KB)...
OKAY [  0.570s]
writing 'boot'...
OKAY [  0.749s]
sending 'recovery' (9284 KB)...
OKAY [  0.661s]
writing 'recovery'...
OKAY [  0.779s]
erasing 'system'...
OKAY [  1.292s]
sending 'system' (721400 KB)...
OKAY [ 22.793s]
writing 'system'...
OKAY [ 49.290s]
erasing 'userdata'...
OKAY [ 17.289s]
formatting 'userdata' partition...
Creating filesystem with parameters:
    Size: 29236371456
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8192
    Inode size: 256
    Journal blocks: 32768
    Label:
    Blocks: 7137786
    Block groups: 218
    Reserved block group size: 1024
Created filesystem with 11/1785856 inodes and 156120/7137786 blocks
sending 'userdata' (139109 KB)...
writing 'userdata'...
OKAY [ 15.596s]
erasing 'cache'...
OKAY [  0.638s]
formatting 'cache' partition...
Creating filesystem with parameters:
    Size: 734003200
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 7472
    Inode size: 256
    Journal blocks: 2800
    Label:
    Blocks: 179200
    Block groups: 6
    Reserved block group size: 47
Created filesystem with 11/44832 inodes and 5813/179200 blocks
sending 'cache' (13348 KB)...
writing 'cache'...
OKAY [  2.196s]
rebooting...

finished. total time: 112.681s
$

Luego el Nexus 5 se reiniciara y veremos una barra azul de progreso

El equipo se reiniciara y ya nos mostrara la ventana para poner el idioma y comenzar la configuracion de nuestra cuenta de Google, pero no continuaremos ya que hay que bloquear nuevamente el bootloader.

19) Reiniciar el Nexus 5 en "FASTBOOT MODE"
$ ~/hammerhead/adb reboot bootloader

Veremos en rojo el titulo

FASTBOOT MODE
...
LOCK STATE - unlocked  <- en color rojo!

20) Bloquear el bootloader
$ ~/Desktop/hammerhead/fastboot oem lock

En el terminal veremos algo como esto:
...
OKAY [  0.040s]
finished. total time: 0.040s

Veremos en rojo el texto
FASTBOOT MODE
...
LOCK STATE - locked <- en color negro!

21) Reiniciamos normalmente el Nexus 5
$ ~/hammerhead/adb reboot

Ya podemos desconectar el Nexus 5 del computador y ya si configurar nuestra cuenta de Google.

2014/03/20

Wireshark

Introduccion:

Instalar el software Wireshark para hacer pruebas de monitoreo de trafico.

Requerimientos:

* FreeBSD instalado
* The X Window System instalado
* KDE instalado
* Conexion a Internet
* Leer este tutorial

Manuales utilizados:

https://forums.freebsd.org/viewtopic.php?&t=20109
http://watchingthecloud.blogspot.com/2010/06/how-to-see-connections-in-wireshark.html
http://wiki.wireshark.org/DisplayFilters

El proceso:

Agregar nuestro usuario no root al grupo wheel

# edit /etc/group

la linea original

wheel:*:0:root

queda asi

wheel:*:0:root, jdoe

Ahora debemos ajustar los permisos de /dev/bpf para que los usurios del grupo wheel puedan acceder

# edit /etc/devfs.conf

Al final agregamos las lineas

# Wireshark
own     /dev/bpf*       root:wheel
perm    /dev/bpf*       0640

Reiniciamos devfs

# /etc/rc.d/devfs restart

Instalamos el port de wireshark

# cd /usr/ports/net/wireshark
# make install clean
...
Installing wireshark-1.10.6... done
===>  Cleaning for libsmi-0.4.8
===>  Cleaning for adns-1.4_1
===>  Cleaning for GeoIP-1.4.8_3
===>  Cleaning for wireshark-1.10.6

Al terminar la instalacion, ya podemos iniciar wireshark desde el usuario jdoe y veremos las tarjetas en las que podemos hacer capturas.

Si luego de usarlo, queremos desinstalarlo, ejecutamos

# pkg delete libsmi-0.4.8 adns-1.4_1 GeoIP-1.4.8_3 wireshark-1.10.6

Para saber como se usa, es bueno ver el siguiente link

http://www.wireshark.org/docs

2014/02/19

SFTP

Introduccion:

Configurar el servicio SFTP para transferencias y que el usuario este enjaulado.

Requerimientos:

* FreeBSD instalado
* Conexion a Internet
* Leer este tutorial

Manuales utilizados:

Chroot sftp users using ssh

El proceso:

# edit /etc/ssh/sshd_config

Agragar al final las lineas:

Match group        chroot
ChrootDirectory    %u
X11Forwarding      no
AllowTcpForwarding no
ForceCommand       internal-sftp

Reiniciar (restart o reload) sshd

# /etc/rc.d/sshd reload

Agragar el nuevo grupo llamado chroot

# pw addgroup chroot

Nota:
Para eliminar un grupo creado, usar: # pw groupdel nombregrupo

Agregar el nuevo usuario con el que se conectaran

# adduser
Username: sftpuser
Full name: SFTP User
Uid (Leave empty for default):
Login group [sftpuser]: chroot         <- Atencion a este parametro!
Login group is chroot. Invite sftpuser into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]:
Home directory [/home/sftpuser]: /home/sftpuser
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : sftpuser
Password   : *****
Full Name  : SFTP User
Uid        : 1170
Class      :
Groups     : chroot
Home       : /home/sftpuser
Home Mode  :
Shell      : /bin/sh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (sftpuser) to the user database.
Add another user? (yes/no): no
Goodbye!

Ahora le ajustamos los permisos al home del usuario

# chown -R root:chroot /home/sftpuser

Crear un directorio llamado pub dentro para que puedan crear archivos

# mkdir /home/sftpuser/pub

Ajustarle los permisos al directorio pub

# chmod -R 0777 /home/sftpuser/pub

Los archivos se deben transferir al directorio pub

2014/02/06

ISC BIND (DNS)

Introduccion:

Instalar ISC BIND.

Requerimientos:

* FreeBSD instalado
* Conexion a Internet
* Leer este tutorial

El proceso:

Actualizar el arbol de ports

# portsnap update

Instalar el port de bind

# cd /usr/ports/dns/bind99
# make install clean

bind99-9.9.5
(dejo las opciones por defecto)
...
Installing bind99-9.9.5... done

Hacer que inicie con el equipo

# echo '# ISC BIND' >> /etc/rc.conf
# echo 'named_enable="YES"' >> /etc/rc.conf

Activar la tarjeta de red que va a nuestra LAN con la IP 192.168.1.1/24

# edit /etc/rc.conf

Agregamos la linea con los datos de nuestra segunda tarjeta de red

#Segunda tarjeta de red que va hacia la LAN
ifconfig_em1="inet 192.168.1.1 netmask 255.255.255.0"

Levantamos manualmente la segunda tarjeta sin reiniciar

# ifconfig em1 inet 192.168.1.1 netmask 255.255.255.0 up

Editar el archivo de configuracion de bind para crear nuestras zonas

# edit /usr/local/etc/namedb/named.conf

Ajustamos las lineas originales

...
        listen-on       { 127.0.0.1; };
...
        forwarders {
                127.0.0.1;
        };
...
zone "example.com" { type master; file "/etc/namedb/master/empty.db"; };
...

por

...
        listen-on       { 127.0.0.1; 192.168.1.1; };
...
        forwarders {
                8.8.8.8;
                8.8.4.4;
        };
...
//zone "example.com" { type master; file "/etc/namedb/master/empty.db"; };
...

Note que:
1) En listen-on se agrega la IP interna para que bind responda consultas que le hagan.
2) En forwarders quitamos la IP local y agregamos las de los DNS de Google.
3) Con doble slash (//) comentamos la linea zone "example.com"...

Al final del archivo agregamos nuestras zonas "zona" y "zona inversa"

...
zone "example.com" {
        type master;
        allow-update { none; };
        allow-transfer { localhost; 192.168.1.2; };
        file "/usr/local/etc/namedb/master/example.com";
};

zone "1.168.192.in-addr.arpa" {
        type master;
        allow-update { none; };
        allow-transfer { localhost; 192.168.1.2; };
        file "/usr/local/etc/namedb/master/1.168.192.in-addr.arpa";
};

Creamos el archivo de nuestra "zona"

# edit /usr/local/etc/namedb/master/example.com

$TTL 3600 ; 1 hour default TTL
example.com.                IN          SOA         freebsd.example.com.         admin.example.com.          (
                                            2013021701          ; Serial
                                            10800               ; Refresh (3 hours)
                                            3600                ; Retry (1 hour)
                                            604800              ; Expire (1 week)
                                            300         ; Negative Response TTL (5 minutes)
                                            )
; DNS Servers
                            IN          NS          freebsd.example.com.                 
; MX Records                                                                
                            ;IN         MX          10 mx.example.com.                  
                            ;IN         MX          20 mail.example.com.                
                            IN          A           192.168.1.1                         
; Machine Names                                                             
localhost                   IN          A           127.0.0.1                           
freebsd                      IN          A           192.168.1.1                         
; Aliases                                                                   

Creamos el archivo de nuestra "zona inversa"

# edit /usr/local/etc/namedb/master/1.168.192.in-addr.arpa

$TTL 3600 ; 1 hour default TTL
1.168.192.in-addr.arpa. IN          SOA         freebsd.example.com.         admin.example.com.          (
                                            2013021701          ; Serial
                                            10800               ; Refresh (3 hours)
                                            3600                ; Retry (1 hour)
                                            604800              ; Expire (1 week)
                                            300                 ; Negative Response TTL (5 minutes)
                                            )
; DNS Servers                                                               
                            IN          NS          freebsd.example.com.                 
; Machine IPs                                                               
1                           IN          PTR         freebsd.example.com.

Iniciamos bind

# /usr/local/etc/rc.d/named start

Hacer que nuestro FreeBSD use el bind

# edit /etc/resolv.conf

Comentamos las lineas "nameserver" y agregamos a bind, queda asi

search example.com
nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844
#nameserver 8.8.8.8
#nameserver 8.8.4.4
nameserver 127.0.0.1

Verificamos que bind esta funcionando

Prueba a un host local

# dig @192.168.1.1 freebsd.example.com

; <<>> DiG 9.9.5 <<>> @192.168.1.1 freebsd.example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36043
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;freebsd.example.com.         IN      A

;; ANSWER SECTION:
freebsd.example.com.  3600    IN      A       192.168.16.1

;; AUTHORITY SECTION:
freebsd.example.com.  3600    IN      NS      ns1.freebsd.example.com.
freebsd.example.com.  3600    IN      NS      ns2.freebsd.example.com.

;; ADDITIONAL SECTION:


;; Query time: 0 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Thu Feb 06 13:40:35 COT 2014
;; MSG SIZE  rcvd: 118

Prueba a un host remoto

# dig @192.168.1.1 google.com

; <<>> DiG 9.9.5 <<>> @192.168.1.1 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48596
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 4, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             300     IN      A       190.248.35.30
google.com.             300     IN      A       190.248.35.45
google.com.             300     IN      A       190.248.35.35
google.com.             300     IN      A       190.248.35.34
google.com.             300     IN      A       190.248.35.24
google.com.             300     IN      A       190.248.35.49
google.com.             300     IN      A       190.248.35.54
google.com.             300     IN      A       190.248.35.40
google.com.             300     IN      A       190.248.35.25
google.com.             300     IN      A       190.248.35.50
google.com.             300     IN      A       190.248.35.59
google.com.             300     IN      A       190.248.35.20
google.com.             300     IN      A       190.248.35.55
google.com.             300     IN      A       190.248.35.44
google.com.             300     IN      A       190.248.35.39
google.com.             300     IN      A       190.248.35.29

;; AUTHORITY SECTION:
google.com.             172742  IN      NS      ns4.google.com.
google.com.             172742  IN      NS      ns1.google.com.
google.com.             172742  IN      NS      ns3.google.com.
google.com.             172742  IN      NS      ns2.google.com.

;; ADDITIONAL SECTION:
ns1.google.com.         172742  IN      A       216.239.32.10
ns2.google.com.         172742  IN      A       216.239.34.10
ns3.google.com.         172742  IN      A       216.239.36.10
ns4.google.com.         172742  IN      A       216.239.38.10

;; Query time: 59 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Thu Feb 06 13:34:11 COT 2014
;; MSG SIZE  rcvd: 431

---------------------------------------------------------------------------------------------------------
Para un bind (slave) que funcione como respaldo del primer bind (master)...

Todo se hace de forma muy similar, pero hay algunos cambios

En named.conf (slave), las zonas al final del archivo quedan asi (vea que en lugar de la carpeta master, quedan en slave) y con la linea masters se especifica la IP del primer bind (master)

...
zone "example.com" {
        type slave;
        file "/usr/local/etc/namedb/slave/example.com";
        masters { 192.168.1.1; };
};

zone "1.168.192.in-addr.arpa" {
        type slave;
        file "/usr/local/etc/namedb/slave/1.168.192.in-addr.arpa";
        masters { 192.168.1.1; };
};

Los archivos "zona" y "zona inversa" no hay que crearlos ya que se importan automaticamente del primer bind (master).

Luego de iniciar bind (slave), los archivos seran transferidos desde el primer bind (master) como por arte de magia

# ls /usr/local/etc/namedb/slave
1.168.192.in-addr.arpa
example.com
---------------------------------------------------------------------------------------------------------