Gentoo Archives: gentoo-user-ru

From: Denis Rybakov <denis.rybakov@×××××.com>
To: gentoo-user-ru@l.g.o
Subject: Re: [gentoo-user-ru] Не ходят пинги в локалке. Кто виноват и что делать???
Date: Thu, 04 Jun 2015 15:33:30
Message-Id: 55706FBC.3070608@gmail.com
In Reply to: [gentoo-user-ru] Не ходят пинги в локалке. Кто виноват и что делать??? by "Andrew A. Sabitov"
1 А с простого начинать пробовали?
2
3 Например временно сказать
4
5 iptables -I FORWARD --src 172.17.18.0/24 --dst 172.16.0.0/24 -j ACCEPT
6 iptables -I FORWARD --src 172.16.0.0/24 --dst 172.17.18.0/24 -j ACCEPT
7
8 чтобы исключить потенциальные ошибки в правилах iptables и всяких там
9 ip4_black_list, ip4_white_list_2_inet, формирование которых тут неочевидно.
10
11 Обычно самое необъяснимое поведение в итоге связано с самыми простыми и
12 тупыми ошибками.
13
14 Что касается действительно необъяснимых подземных стуков в iptables, я
15 имел несчастье наблюдать такие случаи, но все они проявлялись при
16 использовании policy routing.
17 В обычных конфигурациях все ведет себя стабильно и предсказуемо.
18
19 Для адекватного анализа нужен вывод:
20
21 arp -a
22 ip addr list
23 ip rule list
24 ip route list
25 ip route list table local
26 iptables-save
27 ipset list
28
29 При тестировании пингом и логировании tcpdump лучше использовать фильтр
30 типа "tcpdump -ni eth1 icmp" чтобы увидеть трансформации пакетов, если
31 таковые произошли (я надеюсь у вас нет машин, которые постоянно друг
32 друга пингуют).
33
34
35
36 04.06.2015 10:39, Andrew A. Sabitov пишет:
37
38 > Hi!
39 > Коллеги, кто может раскрыть секрет: что, хотя бы в теории, может
40 > убивать пакеты _до_ iptables???
41 >
42 > Симптомы:
43 >
44 > Есть раутер локальной сети, стоящий между юзерами и DMZ.
45 > eth1 смотрит в DMZ, на eth0 взведена куча vlan'он, каждый из которых
46 > смотрит
47 > в нужный кусочек пользовательской сети. На раутере накручены
48 > iptables+ipset.
49 > Шейпер и ebtables не используются
50 >
51 > В первом приближении (и с ОЧЕНЬ хорошей точностью) все работает. Но!!!
52 > Совершенно случайно обнаружил проблему, возникновение которой объяснить
53 > не могу уже неделю :(
54 >
55 > В DMZ есть машина 172.16.0.11 (этот момент не принципиален, т.к.
56 > пробовал с
57 > разных машин и даже из разных IP-сетей, как из DMZ, так и
58 > пользовательских). С
59 > этой машины пускается пинг на 2 адреса в одной из пользовательских сетей.
60 > Для определенности, пусть это будут 172.17.18.19 и 172.17.18.40.
61 >
62 > Получаем такой результат:
63 > ===============================================================
64 > sabitov@fig ~ $ ping 172.17.18.19
65 > PING 172.17.18.19 (172.17.18.19) 56(84) bytes of data.
66 > ^C
67 > --- 172.17.18.19 ping statistics ---
68 > 6 packets transmitted, 0 received, 100% packet loss, time 5002ms
69 >
70 > sabitov@fig ~ $ ping 172.17.18.40
71 > PING 172.17.18.40 (172.17.18.40) 56(84) bytes of data.
72 > 64 bytes from 172.17.18.40: icmp_seq=1 ttl=63 time=5.59 ms
73 > 64 bytes from 172.17.18.40: icmp_seq=2 ttl=63 time=4.90 ms
74 > ^C
75 > --- 172.17.18.40 ping statistics ---
76 > 2 packets transmitted, 2 received, 0% packet loss, time 1001ms
77 > rtt min/avg/max/mdev = 4.900/5.247/5.594/0.347 ms
78 > ===============================================================
79 >
80 > Перед пинганьем на раутере запускаем:
81 > tcpdump -n -i eth0.0018 net 172.17.18.0/24 and host 172.16.0.11
82 > tcpdump -n -i eth1 net 172.17.18.0/24 and host 172.16.0.11
83 >
84 > На eth0.0018 имеем:
85 > ===============================================================
86 > 12:38:00.277614 IP 172.16.0.11 > 172.17.18.19: ICMP echo request, id
87 > 26647, seq 1, length 64
88 > 12:38:00.283405 IP 172.17.18.19 > 172.16.0.11: ICMP echo reply, id
89 > 26647, seq 1, length 64
90 > 12:38:01.280200 IP 172.16.0.11 > 172.17.18.19: ICMP echo request, id
91 > 26647, seq 2, length 64
92 > 12:38:01.285974 IP 172.17.18.19 > 172.16.0.11: ICMP echo reply, id
93 > 26647, seq 2, length 64
94 > 12:38:02.280152 IP 172.16.0.11 > 172.17.18.19: ICMP echo request, id
95 > 26647, seq 3, length 64
96 > 12:38:02.285944 IP 172.17.18.19 > 172.16.0.11: ICMP echo reply, id
97 > 26647, seq 3, length 64
98 > 12:38:03.280164 IP 172.16.0.11 > 172.17.18.19: ICMP echo request, id
99 > 26647, seq 4, length 64
100 > 12:38:03.285961 IP 172.17.18.19 > 172.16.0.11: ICMP echo reply, id
101 > 26647, seq 4, length 64
102 > 12:38:04.280186 IP 172.16.0.11 > 172.17.18.19: ICMP echo request, id
103 > 26647, seq 5, length 64
104 > 12:38:04.286543 IP 172.17.18.19 > 172.16.0.11: ICMP echo reply, id
105 > 26647, seq 5, length 64
106 > 12:38:05.280201 IP 172.16.0.11 > 172.17.18.19: ICMP echo request, id
107 > 26647, seq 6, length 64
108 > 12:38:05.286016 IP 172.17.18.19 > 172.16.0.11: ICMP echo reply, id
109 > 26647, seq 6, length 64
110 > 12:38:13.170502 IP 172.16.0.11 > 172.17.18.40: ICMP echo request, id
111 > 26648, seq 1, length 64
112 > 12:38:13.175813 IP 172.17.18.40 > 172.16.0.11: ICMP echo reply, id
113 > 26648, seq 1, length 64
114 > 12:38:14.172288 IP 172.16.0.11 > 172.17.18.40: ICMP echo request, id
115 > 26648, seq 2, length 64
116 > 12:38:14.176868 IP 172.17.18.40 > 172.16.0.11: ICMP echo reply, id
117 > 26648, seq 2, length 64
118 > ===============================================================
119 >
120 > На eth1:
121 > ===============================================================
122 > 12:38:00.277575 IP 172.16.0.11 > 172.17.18.19: ICMP echo request, id
123 > 26647, seq 1, length 64
124 > 12:38:01.280166 IP 172.16.0.11 > 172.17.18.19: ICMP echo request, id
125 > 26647, seq 2, length 64
126 > 12:38:02.280124 IP 172.16.0.11 > 172.17.18.19: ICMP echo request, id
127 > 26647, seq 3, length 64
128 > 12:38:03.280132 IP 172.16.0.11 > 172.17.18.19: ICMP echo request, id
129 > 26647, seq 4, length 64
130 > 12:38:04.280154 IP 172.16.0.11 > 172.17.18.19: ICMP echo request, id
131 > 26647, seq 5, length 64
132 > 12:38:05.280164 IP 172.16.0.11 > 172.17.18.19: ICMP echo request, id
133 > 26647, seq 6, length 64
134 > 12:38:13.170466 IP 172.16.0.11 > 172.17.18.40: ICMP echo request, id
135 > 26648, seq 1, length 64
136 > 12:38:13.175902 IP 172.17.18.40 > 172.16.0.11: ICMP echo reply, id
137 > 26648, seq 1, length 64
138 > 12:38:14.172256 IP 172.16.0.11 > 172.17.18.40: ICMP echo request, id
139 > 26648, seq 2, length 64
140 > 12:38:14.176978 IP 172.17.18.40 > 172.16.0.11: ICMP echo reply, id
141 > 26648, seq 2, length 64
142 > ===============================================================
143 >
144 > Видно, что с .40 все хорошо, а ответы от .19 не проходят через раутер.
145 > Возникло подозрение,
146 > что где-то в iptables я это блокирую, как результат напихал кучу
147 > правил для логирования
148 > прохождения пакета по цепочкам.
149 >
150 > Это реальный кусок без купюр:
151 > ===============================================================
152 > iptables -t raw -A PREROUTING -s 172.17.18.0/24 -j LOG --log-prefix
153 > "172.17.18.0 (raw): "
154 > iptables -t mangle -A PREROUTING -s 172.17.18.0/24 -j LOG --log-prefix
155 > "172.17.18.0 (mangle): "
156 > #маркируем прямые обращения к squid-у для блокировки в цепочке INPUT
157 > iptables -t mangle -A PREROUTING -p TCP -s 172.16.0.0/15 --dport 3128
158 > -j MARK --set-mark 3128
159 >
160 > iptables -t nat -A PREROUTING -s 172.17.18.0/24 -j LOG --log-prefix
161 > "172.17.18.0 (nat): "
162 > iptables -t nat -A PREROUTING -p TCP \
163 > -s 172.16.0.0/15 \
164 > -m set ! --match-set "ip4_direct_http_clients" src \
165 > -m set ! --match-set "ip4_all_vlans" dst \
166 > -m set --match-set "ip4_proxying_port_list" dst \
167 > -j REDIRECT --to-ports 3128
168 >
169 >
170 > iptables -A FORWARD -s 172.17.18.0/24 -j LOG --log-prefix "172.17.18.0
171 > (1): "
172 > iptables -A FORWARD -p ALL -m set --match-set "ip4_black_list"
173 > src -j DROP
174 > iptables -A FORWARD -s 172.17.18.0/24 -j LOG --log-prefix "172.17.18.0
175 > (2): "
176 >
177 > iptables -A FORWARD -p ALL ! -s 172.17.32.0/24 -m set --match-set
178 > "ip4_all_vlans" src -m set ! --match-set "mac" src,src -m limit
179 > --limit 3/minute --limit-burst 3 -j LOG --log-prefix "Wrong MAC-IP
180 > pair (FORWARD): "
181 > iptables -A FORWARD -p ALL ! -s 172.17.32.0/24 -m set --match-set
182 > "ip4_all_vlans" src -m set ! --match-set "mac" src,src -j DROP
183 >
184 > iptables -A FORWARD -s 172.17.18.0/24 -j LOG --log-prefix "172.17.18.0
185 > (3): "
186 >
187 > iptables -A FORWARD -p ALL -m set --match-set "ip4_white_list_2_inet"
188 > src -j ACCEPT
189 > iptables -A FORWARD -p ALL -m set --match-set "ip4_white_list_2_inet"
190 > dst -j ACCEPT
191 >
192 > iptables -A FORWARD -p ALL -m addrtype --dst-type
193 > BROADCAST -j DROP
194 >
195 > iptables -A FORWARD -s 172.17.18.0/24 -j LOG --log-prefix "172.17.18.0
196 > (4): "
197 >
198 > iptables -A FORWARD -p ALL -m conntrack --ctstate
199 > ESTABLISHED,RELATED -j ACCEPT
200 >
201 > iptables -A FORWARD -s 172.17.18.0/24 -j LOG --log-prefix "172.17.18.0
202 > (5): "
203 >
204 > iptables -A FORWARD -p TCP -j forward_tcp_packets
205 > iptables -A FORWARD -p UDP -j forward_udp_packets
206 > iptables -A FORWARD -p ICMP -j forward_icmp_packets
207 >
208 > iptables -A FORWARD -s 172.17.18.0/24 -j LOG --log-prefix "172.17.18.0
209 > (6): "
210 >
211 > iptables -A forward_icmp_packets -s 172.17.18.0/24 -j LOG --log-prefix
212 > "172.17.18.0: "
213 > iptables -A forward_icmp_packets -p ICMP -j ACCEPT
214 > ===============================================================
215 >
216 > Если верить диаграмме http://inai.de/images/nf-packet-flow.png , то у
217 > меня должно в первую
218 > очередь отработать логирование входящего пакета в цепочке PREROUTING
219 > таблицы raw.
220 > Дык вот, для ответов от .40 это так и есть, а для .19 -- тишина!
221 > ===============================================================
222 > router ~ # grep 172.17.18. /var/log/messages | grep 172.16.0.11
223 > Jun 4 12:38:13 router kernel: 172.17.18.0 (raw): IN=eth0.0018 OUT=
224 > MAC=00:13:21:ae:e7:4b:00:1d:b3:91:29:a0:08:00 SRC=172.17.18.40
225 > DST=172.16.0.11 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=100 PROTO=ICMP
226 > TYPE=0 CODE=0 ID=26648 SEQ=1
227 > Jun 4 12:38:13 router kernel: 172.17.18.0 (raw): IN=eth0.0018 OUT=
228 > MAC=00:13:21:ae:e7:4b:00:1d:b3:91:29:a0:08:00 SRC=172.17.18.40
229 > DST=172.16.0.11 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=100 PROTO=ICMP
230 > TYPE=0 CODE=0 ID=26648 SEQ=1
231 > Jun 4 12:38:13 router kernel: 172.17.18.0 (mangle): IN=eth0.0018 OUT=
232 > MAC=00:13:21:ae:e7:4b:00:1d:b3:91:29:a0:08:00 SRC=172.17.18.40
233 > DST=172.16.0.11 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=100 PROTO=ICMP
234 > TYPE=0 CODE=0 ID=26648 SEQ=1
235 > Jun 4 12:38:13 router kernel: 172.17.18.0 (1): IN=eth0.0018 OUT=eth1
236 > MAC=00:13:21:ae:e7:4b:00:1d:b3:91:29:a0:08:00 SRC=172.17.18.40
237 > DST=172.16.0.11 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=100 PROTO=ICMP
238 > TYPE=0 CODE=0 ID=26648 SEQ=1
239 > Jun 4 12:38:13 router kernel: 172.17.18.0 (2): IN=eth0.0018 OUT=eth1
240 > MAC=00:13:21:ae:e7:4b:00:1d:b3:91:29:a0:08:00 SRC=172.17.18.40
241 > DST=172.16.0.11 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=100 PROTO=ICMP
242 > TYPE=0 CODE=0 ID=26648 SEQ=1
243 > Jun 4 12:38:13 router kernel: 172.17.18.0 (3): IN=eth0.0018 OUT=eth1
244 > MAC=00:13:21:ae:e7:4b:00:1d:b3:91:29:a0:08:00 SRC=172.17.18.40
245 > DST=172.16.0.11 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=100 PROTO=ICMP
246 > TYPE=0 CODE=0 ID=26648 SEQ=1
247 > Jun 4 12:38:13 router kernel: 172.17.18.0 (4): IN=eth0.0018 OUT=eth1
248 > MAC=00:13:21:ae:e7:4b:00:1d:b3:91:29:a0:08:00 SRC=172.17.18.40
249 > DST=172.16.0.11 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=100 PROTO=ICMP
250 > TYPE=0 CODE=0 ID=26648 SEQ=1
251 > Jun 4 12:38:14 router kernel: 172.17.18.0 (raw): IN=eth0.0018 OUT=
252 > MAC=00:13:21:ae:e7:4b:00:1d:b3:91:29:a0:08:00 SRC=172.17.18.40
253 > DST=172.16.0.11 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=101 PROTO=ICMP
254 > TYPE=0 CODE=0 ID=26648 SEQ=2
255 > Jun 4 12:38:14 router kernel: 172.17.18.0 (raw): IN=eth0.0018 OUT=
256 > MAC=00:13:21:ae:e7:4b:00:1d:b3:91:29:a0:08:00 SRC=172.17.18.40
257 > DST=172.16.0.11 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=101 PROTO=ICMP
258 > TYPE=0 CODE=0 ID=26648 SEQ=2
259 > Jun 4 12:38:14 router kernel: 172.17.18.0 (mangle): IN=eth0.0018 OUT=
260 > MAC=00:13:21:ae:e7:4b:00:1d:b3:91:29:a0:08:00 SRC=172.17.18.40
261 > DST=172.16.0.11 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=101 PROTO=ICMP
262 > TYPE=0 CODE=0 ID=26648 SEQ=2
263 > Jun 4 12:38:14 router kernel: 172.17.18.0 (1): IN=eth0.0018 OUT=eth1
264 > MAC=00:13:21:ae:e7:4b:00:1d:b3:91:29:a0:08:00 SRC=172.17.18.40
265 > DST=172.16.0.11 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=101 PROTO=ICMP
266 > TYPE=0 CODE=0 ID=26648 SEQ=2
267 > Jun 4 12:38:14 router kernel: 172.17.18.0 (2): IN=eth0.0018 OUT=eth1
268 > MAC=00:13:21:ae:e7:4b:00:1d:b3:91:29:a0:08:00 SRC=172.17.18.40
269 > DST=172.16.0.11 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=101 PROTO=ICMP
270 > TYPE=0 CODE=0 ID=26648 SEQ=2
271 > Jun 4 12:38:14 router kernel: 172.17.18.0 (3): IN=eth0.0018 OUT=eth1
272 > MAC=00:13:21:ae:e7:4b:00:1d:b3:91:29:a0:08:00 SRC=172.17.18.40
273 > DST=172.16.0.11 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=101 PROTO=ICMP
274 > TYPE=0 CODE=0 ID=26648 SEQ=2
275 > Jun 4 12:38:14 router kernel: 172.17.18.0 (4): IN=eth0.0018 OUT=eth1
276 > MAC=00:13:21:ae:e7:4b:00:1d:b3:91:29:a0:08:00 SRC=172.17.18.40
277 > DST=172.16.0.11 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=101 PROTO=ICMP
278 > TYPE=0 CODE=0 ID=26648 SEQ=2
279 > ===============================================================
280 >
281 > Эта проблема касается не только пингов, а трафика "вообще". Например,
282 > через раз срабатывает обход устройств по SNMP.
283 >
284 >
285 >