Для self-hosted необходим роутер. Имея виртуализацию на базе proxmox, было решено развернуть OpenWRT.
На основном роутере необходимо настроить в DHCP статический IP для нашей OpenWRT, а также в таблице маршрутизации прописать маршруты. Если основной роутер так же на OpenWRT, то это можно сделать добавив: /etc/config/dhcp
config host
option ip '192.168.1.90'
list mac 'BC:24:11:B6:27:9E'/etc/config/network
config route
option interface 'lan'
option target '10.10.0.0/16'
option gateway '192.168.1.90'192.168.1.90 - адрес OpenWRT 10.10.0.0/16 - подсеть адресов в OpenWRT
В данном конфиге необходимо прописать интерфейс нашей локальной сети (в нашем случае это сеть ДДТ), то есть wan 192.168.1.0/24. IP берётся через dhcp и предварительно забит в роутере в предыдущем шаге. /etc/config/network
config device
option name 'br-wan'
option type 'bridge'
list ports 'eth0'
config device
option name 'br-team1'
option type 'bridge'
list ports 'eth1'
config device
option name 'br-team2'
option type 'bridge'
list ports 'eth6'
config device
option name 'br-team3'
option type 'bridge'
list ports 'eth9'
config device
option name 'br-jury'
option type 'bridge'
list ports 'eth7'
config interface 'wan'
option device 'br-wan'
option proto 'dhcp'
config interface 'team1'
option device 'br-team1'
option proto 'static'
option ipaddr '10.10.1.1'
option netmask '255.255.255.0'
config interface 'team2'
option device 'br-team2'
option proto 'static'
option ipaddr '10.10.2.1'
option netmask '255.255.255.0'
config interface 'team3'
option device 'br-team3'
option proto 'static'
option ipaddr '10.10.3.1'
option netmask '255.255.255.0'
config interface 'jury'
option device 'br-jury'
option proto 'static'
option ipaddr '10.10.10.1'
option netmask '255.255.255.0'Основные моменты:
- Добавление всех виртуальных (игровых) сетей в зону lan и локальной сети в wan.
- Разрешаем форвардинг в обе стороны, но при этом баним запросы из 10.10.0.0/16 в 192.168.1.0/24 дабы изнутри сети нельзя было получить доступ ко внешней сети.
- По умолчанию блокируем весь трафик из wan, поэтому добавляем исключения для http, https, ssh
- Включаем маскарад на wan и lan зонах
На основе этого изменим конфиг следующим образом:
/etc/config/firewall
config defaults
option syn_flood '1'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
config zone
option name 'lan'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option masq '1'
option mtu_fix '1'
list network 'team1'
list network 'team2'
list network 'team3'
list network 'jury'
config zone
option name 'wan'
list network 'wan'
list network 'wan6'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
option masq '1'
option mtu_fix '1'
config forwarding
option src 'lan'
option dest 'wan'
config forwarding
option src 'wan'
option dest 'lan'
config rule
option name 'Block 10.10.0.0/16 to 192.168.1.0/24'
option src 'lan'
option dest 'wan'
option dest_ip '192.168.1.0/24'
option target 'REJECT'
option proto 'all'
config rule
option name 'Allow-HTTP'
option src 'wan'
option proto 'tcp'
option dest_port '80'
option target 'ACCEPT'
option family 'ipv4'
config rule
option name 'Allow-HTTPs'
option src 'wan'
option proto 'tcp'
option dest_port '443'
option target 'ACCEPT'
option family 'ipv4'
config rule
option name 'Allow-SSH'
option src 'wan'
option proto 'tcp'
option dest_port '22869'
option target 'ACCEPT'
option family 'ipv4'Необходимо на каждом интерфейсе включить DHCP и закрепить статический ip за mac'ом инстанса.
config dhcp 'team3'
option interface 'team3'
option start '100'
option limit '150'
option leasetime '12h'
config host
list mac 'BC:24:11:8B:A1:BC'
option ip '10.10.3.2'
option name 'team3'Автоматизированно это можно сделать следующим образом:
- Меняем в inventory.yml данные для роутера. Указываем mac адреса и ip всех инстансов.
- Запускаем ansible плейбук
cd ../setup
chmod +x ./start_ansible.sh
./start_ansible.sh router setup