0887 371 498 support@itservice-bg.net
10.06.2009 · Самуил Арсов · Debian

Debian като рутер: VLAN, policy routing и точно време

Три задачи, които се появяват на всеки Debian, поставен да върши работа на рутер: разделяне на мрежата на VLAN-и, маршрутизация по правило вместо по дестинация и часовник, на който може да се вярва. Конфигурациите по-долу са от практиката ни; към всяка е добавено и как същото се прави на съвременна система.

VLAN интерфейси

Virtual Local Area Network (VLAN) е виртуална мрежа, чиито устройства комуникират в един broadcast домейн независимо къде се намират физически. Една VLAN мрежа може да обхваща повече от една LAN, защото физическото разположение няма значение за комуникацията. Обичайно се среща при управляеми суичове и рутери от по-висок клас.

apt-get install vlan

Конфигурацията стои във файла /etc/network/interfaces:

auto vlan101
iface vlan101 inet static
address 172.16.1.1
netmask 255.255.255.0
mtu 1500
vlan_raw_device eth0

auto vlan102
iface vlan102 inet static
address 172.16.2.1
netmask 255.255.255.0
mtu 1500
vlan_raw_device eth0

Същото може да се вдигне и направо в терминала:

ifconfig eth0 up
vconfig add eth0 101
ifconfig eth0.101 172.16.1.1 netmask 255.255.255.0
vconfig add eth0 102
ifconfig eth0.102 172.16.2.1 netmask 255.255.255.0

На съвременна система

vconfig и ifconfig отдавна са извадени от новите дистрибуции. Днес същото се прави с ip:

ip link add link eth0 name eth0.101 type vlan id 101
ip addr add 172.16.1.1/24 dev eth0.101
ip link set eth0.101 up

Policy routing с два доставчика

Обичайната задача: цялата машина излиза през доставчик 1, но една конкретна мрежа трябва да излиза през доставчик 2. Това не се решава с обикновена таблица за маршрути — трябва маркиране на трафика и отделна таблица.

                                                                                         ________
                                                                  +------------+        /
                                                      192.168.1.1 |            |       |
                                                 +----------------+ Provider 1 +-------
        __                                       | eth0           |            |     /
    ___/  \_                              +------+----------+     +------------+    |
  _/        \ mark network 172.16.10.0/24 |   192.168.1.2   |                       /
 /             \         172.16.10.1 eth1 |                 |                       |
| Local network --------------------------+  Linux router   |                       |     Internet
 \           __/        172.16.2.1 eth1:0 |                 |                       |
   \__     __/                            | default gateway |                       \
      \___/                               +------+----------+     +------------+    |
                                                 | eth2           |            |     \
                                                 +----------------+ Provider 2 +-------
                                                                  |            |       |
                                                                  +------------+        \________

Първо добавяме таблица — например с номер 201 и име T1 — във файла /etc/iproute2/rt_tables:

255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
201 T1

След което следва самата конфигурация. Таблицата T1 получава свой маршрут по подразбиране, трафикът от избраната мрежа се маркира, а правилото свързва маркировката с таблицата:

ip route add 127.0.0.0/8 dev lo table T1
ip route add 192.168.1.0/30 dev eth0 src 192.168.1.2 table T1
ip route add 172.16.10.0/24 dev eth1 src 172.16.10.1 table T1
ip route add default via 192.168.1.1 table T1

iptables -A PREROUTING -t mangle -s 172.16.10.0/24 -j MARK --set-mark 101
ip rule add fwmark 101 table T1

Правилата се проверяват с ip rule show, а съдържанието на таблицата — с ip route show table T1. И двете изчезват при рестарт, ако не се запишат в конфигурацията на мрежата.

Точно време (NTP)

Network Time Protocol (NTP) синхронизира часовниците на компютърните системи. Работи по UDP порт 123 и е проектиран да издържа на променлива латентност — свързва се с много сървъри и изчислява точното време от техните отговори. На рутер това не е козметика: разминат часовник обърква логовете, чупи сертификати и прави разследването на инцидент невъзможно.

apt-get install ntp ntpdate

Конфигурационният файл /etc/ntp.conf работи добре по подразбиране. След промяна в него услугата се рестартира:

/etc/init.d/ntp restart

Хардуерният часовник трябва да се сверява, за да не връща времето назад след всеки рестарт:

hwclock --systohc

Кои сървъри са в употреба и как вървят се вижда с:

ntpq -p
ntpdc -p

Датата и часът се четат с date и cal, а ръчното задаване е date -s "YYYY-MM-DD hh:mm:ss".

На съвременна система

В днешните Debian и Ubuntu класическият ntpd е заменен от systemd-timesyncd (за обикновени машини) или chrony (когато трябва по-прецизно). Състоянието се чете така:

timedatectl status
chronyc sources -v

По-нататък

Пълната конфигурация на Debian машина в ролята на ISP рутер — firewall, traffic shaping, привързване на прекъсвания към ядра, тунинг на ядрото — е събрана в Debian advanced router for ISP.