В качестве примера добавляем сеть 10.0.79.160/27 c VID 777. Внешний адрес — 91.233.165.79.
1. Добавить алиас в VLAN211:
ifconfig vlan211 alias 91.233.165.79 netmask 255.255.255.0
Проверяем:
[root@nat /etc]# ifconfig vlan211 vlan211: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=103<RXCSUM,TXCSUM,TSO4> ether 00:25:90:34:45:4e inet 91.233.165.2 netmask 0xffffff00 broadcast 91.233.165.255 ... inet 91.233.165.75 netmask 0xffffff00 broadcast 91.233.165.255 inet 91.233.165.76 netmask 0xffffff00 broadcast 91.233.165.255 inet 91.233.165.77 netmask 0xffffff00 broadcast 91.233.165.255 inet 91.233.165.78 netmask 0xffffff00 broadcast 91.233.165.255 inet 91.233.165.79 netmask 0xffffff00 broadcast 91.233.165.255 media: Ethernet autoselect (1000baseT <full-duplex>) status: active vlan: 211 parent interface: em0
2. Создать субинтерфейс с виланом:
ifconfig vlan777 create ifconfig vlan777 vlan 777 vlandev em1 ifconfig vlan777 inet 10.0.79.161 netmask 255.255.255.224 up
Проверяем созданный вилан:
[root@nat /etc]# ifconfig vlan777 vlan777: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=103<RXCSUM,TXCSUM,TSO4> ether 00:25:90:34:45:4f inet 10.0.79.161 netmask 0xffffffe0 broadcast 10.0.79.191 media: Ethernet autoselect (1000baseT <full-duplex>) status: active vlan: 777 parent interface: em1
3. Прописать конфиг в автозагрузку.
Файл конфига — /etc/rc.conf
— внешний интерфейс (алиас):
В раздел # External VLAN добавить строчку в конец:
ifconfig_vlan211_alias76="inet 91.233.165.79 netmask 255.255.255.0"
— внутренний интерфейс:
В раздел # Internal VLANS добавить строчку в конец:
ifconfig_vlan777="inet 10.0.79.161 netmask 255.255.255.224 vlan 777 vlandev em1 up"
— создание вилана:
В раздел # ALL VLANS, в параметр cloned_interfaces добавить следующий вилан — в нашем случае vlan777 (через пробел перед закрывающими кавычками).
Будет выглядеть так:
cloned_interfaces="vlan211 vlan700 vlan701 vlan702 vlan703 ... vlan773 vlan774 vlan775 vlan776 vlan777"
— вилан для DHCP:
В разделе # DHCP в параметр dhcpd_ifaces добавить следующий вилан — в нашем случае vlan777 (через пробел перед закрывающими кавычками).
Будет выглядеть так:
dhcpd_ifaces="vlan700 vlan701 vlan702 vlan703 ... vlan773 vlan774 vlan775 vlan776 vlan777"
4. Добавить правило в фаерволл.
Смотрим последние ID’шники в фаерволле:
[root@nat /usr/local/etc]# ipfw show 00100 172764 11123904 allow ip from any to any via lo0 00200 0 0 deny ip from any to 127.0.0.0/8 00300 0 0 deny ip from 127.0.0.0/8 to any 00400 0 0 allow ip from me to me via lo0 00500 0 0 allow ip from 193.254.224.0/23 to me dst-port 22 00550 7718 604497 allow ip from 91.233.164.0/22 to me dst-port 22 00600 3394 151276 deny ip from any to me dst-port 22 00650 4652 268413 allow icmp from 10.0.0.0/8 to me ... 15800 49300632 21593338768 nat 76 ip from any to 91.233.165.76 via vlan211 15900 2337072 303455557 nat 77 ip from 10.0.79.96/27 to any via vlan211 16000 3626125 2381511983 nat 77 ip from any to 91.233.165.77 via vlan211 16100 114596180 80389379604 nat 78 ip from 10.0.79.128/27 to any via vlan211 16200 132948900 134350587769 nat 78 ip from any to 91.233.165.78 via vlan211 65535 8214068781 6770321073906 allow ip from any to any
Нас интересует ID последнего правила и ID NAT’а. Видим, что последний ID фаерволла — 16200. (65535 — это правило по умолчанию). Последний ID ната — 78.
Теперь добавляем 2 новых правила с ID правила +100 для каждого и с ID натом +1 для обоих правил:
ipfw nat 79 config log ip 91.233.165.79 reset same_ports ipfw add 16300 nat 79 ip from 10.0.79.160/27 to any via vlan211 ipfw add 16400 nat 79 ip from any to 91.233.165.79 via vlan211
5. Прописать конфиг в автозагрузку фаерволла.
Для этого редактируем файл /root/firewall:
В блок # NAT Config добавляем в конец:
nat 79 config log ip 91.233.165.79 reset same_ports
В блок # NAT Rules добавляем в конец:
add nat 79 ip from 10.0.79.160/27 to any via vlan211 add nat 79 ip from any to 91.233.165.79 via vlan211
Сохраняем!
6. Добавить pool в DHCP для нового вилана.
В конфиг по адресу mcedit /usr/local/etc/dhcpd.conf добавить новую subnet по аналогии с предыдущей:
subnet 10.0.79.160 netmask 255.255.255.224 { authoritative; option routers 10.0.79.161; range 10.0.79.163 10.0.79.190; option broadcast-address 10.0.79.191; }
Примечание:
IP’шники считаются по правилам вычисления масок. Для этого можно использовать утилиту:
[root@nat /usr/local/etc]# ipcalc -n 10.0.79.160/255.255.255.224 Address: 10.0.79.160 00001010.00000000.01001111.101 00000 Netmask: 255.255.255.224 = 27 11111111.11111111.11111111.111 00000 Wildcard: 0.0.0.31 00000000.00000000.00000000.000 11111 => Network: 10.0.79.160/27 00001010.00000000.01001111.101 00000 HostMin: 10.0.79.161 00001010.00000000.01001111.101 00001 HostMax: 10.0.79.190 00001010.00000000.01001111.101 11110 Broadcast: 10.0.79.191 00001010.00000000.01001111.101 11111 Hosts/Net: 30 Class A, Private Internet
У нас каждая сеточка состоит из 32 адресов. Первый — это всегда идентификатор сети (тот, который прописывается в строке subnet), маска сети всегда 255.255.255.224. Option routers будет +1 к идентификатору сети. Range — +2 к роутеру (первый адрес) и последний высчитывает по маске сети. В данном случае — это HostMax (10.0.79.190). И бродкаст — 10.0.79.191, как и в калькуляторе.
Сохраняем!
Перезагружаем DHCP
/usr/local/etc/rc.d/isc-dhcpd restart