Skip to content

Коррекция правил iptables #116

@AltGrF13

Description

@AltGrF13

Есть куча скриптов в opt/etc/ndm/netfilter.d, которые срабатывают при перезапуске роутера целиком или какого-то из его интерфейсов (например, в веб-морде что-то изменили). В 100-dns-local идёт вызов ip4_firewall_dns_rules_set из opt/etc/ndm/ndm:129, где:

  1. Правила iptables без протокола, т.е. ALL. Т.е. туда полетят и ICMP (как минимум), а SS умеет работать только с TCP и UDP. В общем, для SS нельзя создавать правила iptables без -p, посыл коммита 6e5db2e2dda07537aa1d4a285b2b4cf09a31d52e не верен. Как минимум не откачено ещё в:
  • ip4_firewall_vpn_mark
  • ip4_firewall_mark_rules_tcp_udp_on
  • ip4tbl_flush_rm_match_set
  1. В if остался grep закомментированного protocol, после вышеназванного коммита условие не срабатывает никогда (более того, в логе роутера постоянный спам ошибки), для подключения SS этих правил DNS в iptables больше нет (хотя несколько лет подряд КВАСом для SS они создавались всегда)
iptables -A PREROUTING -w -t nat -i br0 -p tcp --dport 53 -j DNAT --to 192.168.1.1
iptables -A PREROUTING -w -t nat -i br0 -p udp --dport 53 -j DNAT --to 192.168.1.1

И знаете… пока прекрасно работает без этого. Если я правильно их понимаю, они были нужны, если клиенты WiFi указывали кастомный нешифрованный DNS, то обход продолжал работать. Но если человек так поступил, то сам себе злобный Буратино — в доке описано так не поступать; да и смущает разное поведение на шифрованный и нешифрованный DNS из-за них.

В общем, предлагаю этот метод откатить (к использованию protocol) и временно задокументировать целиком. Если жалоб не будет, то при очередном рефакторинге почистить и его тело, и вызов в 100-dns-local.

ip4_firewall_dns_rules_set() {
#	interface=$(get_local_inface)
	local_ip=$(get_router_ip)

#	for protocol in tcp udp ; do
		#	Если не заданы аргументы, то ничего не выполняем
#		if [ -n "${interface}" ] && [ -n "${local_ip}" ]; then
			# если правила для tcp есть, то пропускаем их добавление
#			if ! ip4save | grep -q "${protocol} \-\-dport ${DNS_PORT} \-j DNAT" ; then
#				log_warning "Подключаем правила для корректной работы DNS трафика через 53 порт:"
#				log_warning "Интерфейс: ${interface}, IP: ${local_ip}, протокол: ${protocol}."
#				ip4tables PREROUTING -w -t nat -i "${interface}" -p "${protocol}" --dport ${DNS_PORT} -j DNAT --to "${local_ip}" &>/dev/null \
#					|| error "[${FUNCNAME}] Возникла ошибка в функции при установке правил iptables."
#			fi
#		else
#			log_error "При вызове ip4_firewall_dns_rules_set не были заданы обязательные аргументы."
#		fi
#	done
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions