История изменений
Исправление vel, (текущая версия) :
Год или два назад здесь была аналогичная тема. Я специально тогда в исходниках смотрел и сейчас не поленился!
3.0, 3.4, 3.14, 3.18, 4.4, 4.9, 4.14, 4.19, 5.0, 5.1, 5.2
Практически буква в букву.
net/ipv4/netfilter/iptable_mangle.c:ipt_mangle_out()
/* Save things which could affect route */
mark = skb->mark;
iph = ip_hdr(skb);
saddr = iph->saddr;
daddr = iph->daddr;
tos = iph->tos;
ret = ipt_do_table(skb, state, state->net->ipv4.iptable_mangle);
/* Reroute for ANY change. */
if (ret != NF_DROP && ret != NF_STOLEN) {
iph = ip_hdr(skb);
if (iph->saddr != saddr ||
iph->daddr != daddr ||
skb->mark != mark ||
iph->tos != tos) {
err = ip_route_me_harder(state->net, skb, RTN_UNSPEC);
if (err < 0)
ret = NF_DROP_ERR(err);
}
}
интересно, чем бы штатным сменить daddr в mangle/output?
Какой кошмар. Уж лучше split DNS, чем это.
Ну не знаю. Если у тебя 1.5 зоны, то может быть и проще.
Исходная версия vel, :
Год или два назад здесь была аналогичная тема. Я специально тогда в исходниках смотрел и сейчас не поленился!
3.0, 3.4, 3.14, 3.18, 4.4, 4.9, 4.14, 4.19, 5.0, 5.1, 5.2
Практически буква в букву.
net/ipv4/netfilter/iptable_mangle.c:ipt_mangle_out()
/* Save things which could affect route */
mark = skb->mark;
iph = ip_hdr(skb);
saddr = iph->saddr;
daddr = iph->daddr;
tos = iph->tos;
ret = ipt_do_table(skb, state, state->net->ipv4.iptable_mangle);
/* Reroute for ANY change. */
if (ret != NF_DROP && ret != NF_STOLEN) {
iph = ip_hdr(skb);
if (iph->saddr != saddr ||
iph->daddr != daddr ||
skb->mark != mark ||
iph->tos != tos) {
err = ip_route_me_harder(state->net, skb, RTN_UNSPEC);
if (err < 0)
ret = NF_DROP_ERR(err);
}
}
PS интересно, чем бы штатным сменить daddr в mangle/output?