Как запустить OpenWRT под lxc и настроить маршрутизацию

Использование программного роутера - довольно недорогое и одновременно высокопроизводительное решение, но использование ОС внутри виртуальной машины с аппаратной виртуализацией создаёт дополнительные задержки и повышенную нагрузку на железо. Лучшим решением является использование виртуальных машин с программной виртуализацией, в данном случае я использую LXC.

В качестве "роутерной" ОС будет выступать свободная операционная система OpenWRT.

К сожалению, готовых шаблонов для автоустановки нет, поэтому будем писать конфиг вручную.

Сперва, нам необходимо скачать образ корневой ФС, она имеет имя в роде rootfs-squashfs.img.gz, например https://downloads.openwrt.org/releases/19.07.3/targets/x86/64/openwrt-19.07.3-x86-64-rootfs-squashfs.img.gz

Переходим в /var/lib/lxc, создаём директорию с именем машины и копируем ФС в vm/rootfs

  1. cd /var/lib/lxc
  2. wget https://downloads.openwrt.org/releases/19.07.3/targets/x86/64/openwrt-19.07.3-x86-64-rootfs-squashfs.img.gz
  3. gzip -d openwrt-19.07.3-x86-64-rootfs-squashfs.img.gz
  4. mkdir mount
  5. mount openwrt-19.07.3-x86-64-rootfs-squashfs.img mount -o loop
  6. mkdir -p router/rootfs
  7. cp -a mount/* router/rootfs/
  8. umout mount
  9. rm openwrt-19.07.3-x86-64-rootfs-squashfs.img

Приступаем к написанию конфига router/config. Общий вид такой:

lxc.include = /usr/share/lxc/config/common.conf
lxc.include = /usr/share/lxc/config/userns.conf
lxc.arch = linux64
lxc.mount.auto = proc:mixed sys:ro cgroup:mixed
lxc.rootfs.path = dir:/var/lib/lxc/router/rootfs
lxc.cgroup.devices.allow = c 108:0 rwm
lxc.mount.entry = /dev/ppp dev/ppp none bind,optional,create=file

lxc.net.0.type = veth
lxc.net.0.link = br0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 52:a4:00:d3:4e:ea
lxc.net.0.name = eth0

Касательно опций

lxc.cgroup.devices.allow = c 108:0 rwm
lxc.mount.entry = /dev/ppp dev/ppp none bind,optional,create=file

Они необходимы для работы PPP (PPPoE), если это не требуется, необходимо удалить эти строчки.

108:0 определяется таким образом:

На хост-машине: ls -ls /dev/ppp

0 crw------- 1 root root 108, 0 May 21 13:05 /dev/ppp

108, 0 и есть нужные нам значения.

После того, как настроили сеть и зашли на роутер либо через luCI, либо через консоль, необходимо прописать кастомное правило для фаерволла, для этого заходим в Network - Firewall - Custom rules и прописываем iptables -t nat -A POSTROUTING -o pppoe-inet -j MASQUERADE

Или же прописать в /etc/firewall.user

где pppoe-inet имя вашего интерфейса "с интернетом". Да, это костыль, почему-то по дефолту маршрутизация с lxc версией не работает.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *