[prev in list] [next in list] [prev in thread] [next in thread]
List: openbsd-tech
Subject: Re: pf doesn't rewrite source address for the icmp errors with rdr-to
From: Mike Belopuhov <mkb () crypt ! org ! ru>
Date: 2011-02-23 11:54:57
Message-ID: 20110223115457.GA3222 () valkyrie ! hq ! vantronix ! net
[Download RAW message or body]
On Thu, Feb 17, 2011 at 14:00 +0100, Mike Belopuhov wrote:
> in the simple setup, like the one described in the pr 6564,
> pf won't rewrite source address for the icmp errors (like
> destination unreachable) when doing rdr-to.
>
> this diff fixes issue for me and a pr originator. comments?
> do we want to put it into 4.9?
>
hi, i'm your friendly reminder that w/o this diff pf will be sending
out untranslated icmp error packets to the interwebs and anything can
happen! save a kitten, okay a diff!
> Index: pf.c
> ===================================================================
> RCS file: /home/cvs/src/sys/net/pf.c,v
> retrieving revision 1.726
> diff -u -p -r1.726 pf.c
> --- pf.c 14 Feb 2011 11:01:36 -0000 1.726
> +++ pf.c 17 Feb 2011 11:54:53 -0000
> @@ -4498,8 +4498,7 @@ pf_test_state_icmp(struct pf_state **sta
> &nk->addr[pd2.didx], pd2.af) ||
> nk->port[pd2.didx] != th.th_dport)
> pf_change_icmp(pd2.dst, &th.th_dport,
> - NULL, /* XXX Inbound NAT? */
> - &nk->addr[pd2.didx],
> + saddr, &nk->addr[pd2.didx],
> nk->port[pd2.didx], NULL,
> pd2.ip_sum, icmpsum,
> pd->ip_sum, 0, pd2.af);
> @@ -4576,8 +4575,7 @@ pf_test_state_icmp(struct pf_state **sta
> &nk->addr[pd2.didx], pd2.af) ||
> nk->port[pd2.didx] != uh.uh_dport)
> pf_change_icmp(pd2.dst, &uh.uh_dport,
> - NULL, /* XXX Inbound NAT? */
> - &nk->addr[pd2.didx],
> + saddr, &nk->addr[pd2.didx],
> nk->port[pd2.didx], &uh.uh_sum,
> pd2.ip_sum, icmpsum,
> pd->ip_sum, 1, pd2.af);
> @@ -4653,7 +4651,7 @@ pf_test_state_icmp(struct pf_state **sta
>
> if (PF_ANEQ(pd2.dst,
> &nk->addr[pd2.didx], pd2.af))
> - pf_change_icmp(pd2.dst, NULL, NULL,
> + pf_change_icmp(pd2.dst, NULL, saddr,
> &nk->addr[pd2.didx], 0, NULL,
> pd2.ip_sum, icmpsum,
> pd->ip_sum, 0, AF_INET);
> @@ -4728,7 +4726,7 @@ pf_test_state_icmp(struct pf_state **sta
>
> if (PF_ANEQ(pd2.dst,
> &nk->addr[pd2.didx], pd2.af))
> - pf_change_icmp(pd2.dst, NULL, NULL,
> + pf_change_icmp(pd2.dst, NULL, saddr,
> &nk->addr[pd2.didx], 0, NULL,
> pd2.ip_sum, icmpsum,
> pd->ip_sum, 0, AF_INET6);
> @@ -4774,8 +4772,7 @@ pf_test_state_icmp(struct pf_state **sta
>
> if (PF_ANEQ(pd2.dst,
> &nk->addr[pd2.didx], pd2.af))
> - pf_change_icmp(pd2.src, NULL,
> - NULL, /* XXX Inbound NAT? */
> + pf_change_icmp(pd2.dst, NULL, saddr,
> &nk->addr[pd2.didx], 0, NULL,
> pd2.ip_sum, icmpsum,
> pd->ip_sum, 0, pd2.af);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic