====== Конфигурация VBox ======
===== Настройка сети =====
После установки VirtualBox и web-морды к нему выполняем настройки, чтобы обеспечить удобство использования этой связки.
Первым делом создаем виртуальную сеть, в которой будут работать виртуальные машины. VBox из коробки предоставляет возможность создать сеть vboxnet и даже может выдавать в ней IP адреса. Первое нам пригодится, а вот второе мы будем выполнять за него самостоятельно, использую для этого **dnsmasq**
Для этого заходим в Файл-Настройки-Сеть-Виртуальные сети хоста и создаем новую сеть. У меня это vboxnet0 {{:wiki:freebsd:vbox-network.png?direct|}}
Нужно снять птичку с включить DHCP-сервер, выключить его.
==== Установка и настройка dnsmqsq ====
=== Устанавливаем dnsmasq ===
# устанавливаем dnsmasq
cd /usr/ports/dns/dnsmasq
make install clean
sysrc dnsmasq_enable="YES"
#
echo 'conf-dir=/usr/local/etc/dnsmasq.d' >> /usr/local/etc/dnsmasq.conf
mkdir /usr/local/etc/dnsmasq.d
=== Создаем файл конфигурации dnsmasq ===
nano /usr/local/etc/dnsmasq.d/vbox.conf
dhcp-range=set:vboxnet0, 192.168.56.2, 192.168.56.50, 255.255.255.0, 10m
dhcp-option=tag:vboxnet0, option:netmask, 255.255.255.0
dhcp-option=tag:vboxnet0, option:router, 192.168.56.1
dhcp-option=tag:vboxnet0, option:dns-server, 192.168.56.1
dhcp-option=tag:vboxnet0, option:ntp-server, 192.168.56.1
log-facility=/var/log/dnsmasq.log
interface=vboxnet0
# CloudFlare
server=1.1.1.1
server=1.0.0.1
# OpenDNS
server=208.67.222.222
server=208.67.220.220
# Google
server=8.8.8.8
server=8.8.4.4
# Настройки VM
dhcp-host=08:00:27:c0:12:1e, app, 192.168.56.10, 30d,set:vboxnet0
address=/app/192.168.56.10
address=/app.local/192.168.56.10
В данном конфиге нас интересуют только последние три строки. В **первой** мы указываем **MAC** виртуалки и **IP**, который хотим ей присвоить. После создания VM нужно вписать сюда по аналогии. Две другие строки - для задания hostname виртуалке, которое будет доступно в данной локальной сети. Например: mysql, app, redis и т.п.
=== Проверяем работу dnsmasq ===
lsof -i :67 -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dnsmasq 2115 nobody 4u IPv4 0xfffff801036345d0 0t0 UDP *:67
Обращаю пристальное внимание на то, что по-умолчанию VBox создает виртуалки за NAT, который он организовывает сам. Поскольку у нас собственная локальная сеть на vboxnet0, то создавать свои виртуалки мы будем на ней и **NAT** нам нужно теперь **организовать самостоятельно**.
==== Использование FreeBSD в качестве шлюза с ipfw NAT ====
Начнем использовать ipfw kernel NAT, который нужно включить во FreeBSD. Действуем внимательно, так как при ошибках в конфиге можно легко потерять доступ к серверу по SSH
=== Включаем Русский язык во FreeBSD ===
# Включаем Русский язык
sysrc keymap="ru"
tee -a /boot/loader.conf << END
# RUS
kern.vty=vt
#--
END
tee -a /etc/profile << END
# RUS
LANG=ru_RU.UTF-8
export LANG
MM_CHARSET=UTF-8
export MM_CHARSET
export EDITOR=/usr/local/bin/nano
#--
END
=== Включаем ipfw + NAT + шлюз во FreeBSD ===
tee -a /boot/loader.conf << END
# IPFW
ipfw_load="YES"
ipfw_nat_load="YES"
firewall_logif="YES"
#--
END
# включаем FreeBSD, как шлюз - разрешаем ходить трафику между интерфейсами
sysrc gateway_enable="YES"
=== Настраиваем ipfw ===
#!/bin/sh
cmd="/sbin/ipfw -q"
$cmd -f flush
$cmd enable one_pass
$cmd add allow all from any to any via lo0
$cmd add deny all from any to 127.0.0.0/8
$cmd add deny all from 127.0.0.0/8 to any
$cmd add deny all from any to any frag
$cmd add check-state
$cmd add allow tcp from any to any established
$cmd add allow all from any to any out keep-state
# ssh
$cmd table admin create missing
$cmd table admin add 46.160.0.0/19
$cmd add allow ip from "table(admin)" to me 22
# HTTP && HTTPS
$cmd add allow tcp from any to me 443 in limit src-addr 50
$cmd add allow tcp from any to me 80 in limit src-addr 20
# Mail
$cmd add allow tcp from me to any 25 out
$cmd add allow tcp from any 25 to me in
# Ping
$cmd add allow icmp from "table(admin)" to me in icmptype 8
$cmd add allow icmp from me to "table(admin)" out icmptype 0,8
$cmd add deny log all from any to any
sysrc firewall_script="/etc/ipfw.script"
sysrc firewall_enable="yes"