Назад | Перейти на главную страницу

Где заканчиваются мои LVS-пакеты?

По историческим причинам я установил балансировщик нагрузки LVS на SLES, используя «перенаправитель», написанный мной. Этот перенаправитель будет принимать пакеты UDP на один адрес: порт и отправлять их на другой. Соответственно, ответы будут отправлены сначала перенаправителю, а затем обратно инициатору запроса. Вместе с какой-то специальной проверочной программой, которая работала.

Однако все это было лишь обходным решением, пока я не смог выполнить NAT пакетов с помощью iptables в SLES 12.

Я попробовал настроить, но не работает. Что работает, так это перенаправление удаленных пакетов на локальный адрес: порт и перенаправление локального адреса: порта на внешний адрес: порт.

Скорее всего мне не хватает какой-то настройки iptables. Также мне не совсем понятно, нужно ли включать пересылку и когда. Итак, вот некоторые настройки конфигурации.

Во-первых, конфигурация ldirector для перенаправления DNS (пожалуйста, не обсуждайте, имеет ли смысл балансировать нагрузку на локальные DNS-серверы).

checktimeout = 5
checkinterval = 15
autoreload = yes
fork = yes
# logfile = "/var/log/ldirectord.log"
logfile = "daemon"
quiescent = yes

# DNS
virtual = 172.20.16.36:53
### For external-perl the command has to work inside "sub { ... }"
        checktype = external-perl
        checkcommand = "/etc/ldirectord/dnscheck.pl"
        checktimeout = 10
        checkinterval = 15
        failurecount = 1
        protocol = udp
        scheduler = rr
        real = 172.20.16.36:53001 masq 1
        real = 172.20.16.36:53002 masq 1

Затем статус LVS:

# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
UDP  172.20.16.36:53 rr
  -> 172.20.16.36:53001           Masq    1      0          0
  -> 172.20.16.36:53002           Masq    1      0          0

Далее настройка iptables с помощью брандмауэра SUSE:

# iptables -L -n
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED
input_int  all  --  0.0.0.0/0            0.0.0.0/0
input_int  all  --  0.0.0.0/0            0.0.0.0/0
input_int  all  --  0.0.0.0/0            0.0.0.0/0
input_ext  all  --  0.0.0.0/0            0.0.0.0/0
LOG        all  --  0.0.0.0/0            0.0.0.0/0            limit: avg 3/min burst 5 LOG flags 6 level 4 prefix "SFW2-IN-ILL-TARGET "
DROP       all  --  0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy DROP)
target     prot opt source               destination
LOG        all  --  0.0.0.0/0            0.0.0.0/0            limit: avg 3/min burst 5 LOG flags 6 level 4 prefix "SFW2-FWD-ILL-ROUTING "

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

Chain forward_ext (0 references)
target     prot opt source               destination

Chain forward_int (0 references)
target     prot opt source               destination

Chain input_ext (1 references)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0            PKTTYPE = broadcast
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 4
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8
LOG        tcp  --  0.0.0.0/0            0.0.0.0/0            limit: avg 3/min burst 5 tcp dpt:5560 flags:0x17/0x02 LOG flags 6 level 4 prefix "SFW2-INext-ACC-TCP "
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:5560
LOG        tcp  --  0.0.0.0/0            0.0.0.0/0            limit: avg 3/min burst 5 tcp dpt:22 flags:0x17/0x02 LOG flags 6 level 4 prefix "SFW2-INext-ACC-TCP "
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
DROP       all  --  0.0.0.0/0            0.0.0.0/0            /* sfw2.insert.pos */ PKTTYPE != unicast
LOG        tcp  --  0.0.0.0/0            0.0.0.0/0            limit: avg 3/min burst 5 tcp flags:0x17/0x02 LOG flags 6 level 4 prefix "SFW2-INext-DROP-DEFLT "
LOG        icmp --  0.0.0.0/0            0.0.0.0/0            limit: avg 3/min burst 5 LOG flags 6 level 4 prefix "SFW2-INext-DROP-DEFLT "
LOG        udp  --  0.0.0.0/0            0.0.0.0/0            limit: avg 3/min burst 5 ctstate NEW LOG flags 6 level 4 prefix "SFW2-INext-DROP-DEFLT "
DROP       all  --  0.0.0.0/0            0.0.0.0/0

Chain input_int (3 references)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

Chain reject_func (0 references)
target     prot opt source               destination
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            reject-with tcp-reset
REJECT     udp  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-proto-unreachable

Я также пытался отследить поток пакетов, используя:

# iptables -t raw -D PREROUTING -p udp -d 172.20.2.1  --dport 53 -j TRACE
# iptables -t raw -A PREROUTING -p udp -d 172.20.2.1  --dport 53 -j TRACE
# iptables -t raw -A PREROUTING -p udp -d 172.20.2.2  --dport 53 -j TRACE

Что я получил от него (слегка отфильтровал и переформатировал):

[5535166.799140] 9211 raw:PREROUTING:policy:2 DST=172.20.16.6 SRC=172.20.2.1 SPT=53 PROTO=UDP IN=bond0 DPT=44632
[5535166.799172] 9211 filter:INPUT:rule:2 DST=172.20.16.6 SRC=172.20.2.1 SPT=53 PROTO=UDP IN=bond0 DPT=44632

(второй столбец - ID= стоимость)

Так что, отсутствует какое-то правило iptables или мне нужно что-то изменить?

Стоит ли добавлять в iptables больше статов TRACE?