LINUX.ORG.RU

Сообщения sdmitriy

 

conntrackd и dnat

Добрый день!

Пытаюсь настроить conntrackd для резервирования брандмауэра/балансировщика/маршрутизатора. Имитирую ситуацию когда мастер неожиданно упал (пакет туда через один хост, обратно через другой).

conntrackd.conf:

Sync {
	Mode FTFW {
		DisableExternalCache On
	}
	Multicast {
		IPv4_address 225.0.0.100
		Group 3780
		IPv4_interface 10.93.0.101 # и 10.93.0.102 на другом хосте
		Interface ens224
		SndSocketBuffer 1249280
		RcvSocketBuffer 1249280
		Checksum on
	}
	Options {
		ExpectationSync On
	}
}
General {
	Nice -20
	HashSize 32768
	HashLimit 131072
	LogFile on
	LockFile /var/lock/conntrack.lock
	UNIX {
		Path /var/run/conntrackd.ctl
		Backlog 20
	}
	NetlinkBufferSize 2097152
	NetlinkBufferSizeMaxGrowth 8388608
	Filter From Userspace {
		Protocol Accept {
			TCP
			SCTP
			DCCP
			UDP
			ICMP
		}
		Address Ignore {
			IPv4_address 127.0.0.1 # loopback
			IPv4_address 10.93.0.101 # и 10.93.0.102 на другом хосте
			IPv4_address 10.98.0.100 # virtual IP 1
			IPv4_address 10.98.0.101 # и 10.98.0.102 на другом хосте
		}
	}
}

Данные о соединениях при этом кажется) синхронизируются. По крайней мере после прохождения пакета через один хост:

[root@host01 ~]# conntrack -L -g -s 10.100.65.48 -d 10.98.1.69
tcp      6 119 SYN_SENT src=10.100.65.48 dst=10.98.1.69 sport=57021 dport=80 [UNREPLIED] src=10.98.255.85 dst=10.100.65.48 sport=80 dport=57021 mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1
второй хост вроде) знает об этом пакете:
[root@host02 ~]# conntrack -L -g -s 10.100.65.48 -d 10.98.1.69
tcp      6 108 SYN_SENT src=10.100.65.48 dst=10.98.1.69 sport=57021 dport=80 [UNREPLIED] src=10.98.255.85 dst=10.100.65.48 sport=80 dport=57021 mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1

А дальше не понятно, ответный пакет идет через второй хост и попадает под правило:

-A FORWARD -s 10.98.254.0/23 -m conntrack --ctstate INVALID -j DROP
если правило убрать, подмена адреса источника в ответном пакете не происходит, в выводе conntrack -L никаких изменений нет

 , ,

sdmitriy
()

iptables потерялись пакеты

Добавляю правило:

iptables -t mangle -A PREROUTING -s 10.98.254.140/32 -d 10.98.0.250/32 -j LOG
В логе вижу:
May 25 13:49:13 hostname kernel: IN=tun0 OUT= MAC=3a:ad:3c:c5:db:e8:0a:58:0a:62:fe:8c:08:00 SRC=10.98.254.140 DST=10.98.0.250 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=8080 DPT=41322 WINDOW=27960 RES=0x00 ACK SYN URGP=0
Убираю это правило и добавляю другое:
iptables -t nat -I PREROUTING -s 10.98.254.140/32 -d 10.98.0.250/32 -j LOG
И в логе ничего не вижу. Действие по умолчанию в таблице mangle для цепочки PREROUTING - ACCEPT. Если не ошибаюсь - пакет должен попасть в цепочку PREROUTING таблицы nat после цепочки PREROUTING таблицы mangle.
Что могло случиться с пакетом?

 ,

sdmitriy
()

RSS подписка на новые темы