NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/60191: npf: map dynamic to localhost works for v4 but not for v6



Traffic _from the local host_ to its own public addresses is also
troublesome.

With the rules above, _remote hosts_ can do, e.g.,

	ftp -4 http://example.com/robots.txt

and it works fine, while

	ftp -6 http://example.com/robots.txt

does not (packets arrive at $primary_if but go nowhere), where
example.com has those npf rules -- that's the original issue.

I can work around this by changing the v6 rule to

	map $primary_if dynamic proto tcp $primary_addrs port 8000 \
	    <- $primary_v6 port 80

at the cost of inadvertently exposing public access via port 8000 too
(not a big deal but kind of sloppy).

On the _local host_ (i.e., on example.com),

	ftp -4 http://example.com/robots.txt

gives connection refused, via TCP RST that shows up on lo0 with
tcpdump, and leads to no output in `npfctl list -n'.  I can make this
work by adding:

	map lo0 dynamic proto tcp 127.0.0.1 port 8000 \
	    <- $primary_v4 port 80

If the v4 address is 192.0.2.123, then with this additional map rule,
`npfctl list -n' shows (after running ftp -4):

# src-addr:port       dst-addr:port         interface  nat-addr:port
192.0.2.123:65519     192.0.2.123:80        lo0        127.0.0.1:8000

But I can't find how to make

	ftp -6 http://example.com/robots.txt

work _on the local host_ (i.e., on example.com).

I tried various combinations of map lo0 and map $primary_if with
sources and destinations of $primary_v6, $primary_addrs, and
hard-coded explicit addresses -- couldn't find anything that worked;
everything I tried went nowhere with zero output from tcpdump on
either lo0 or $primary_if.

If the v6 addresses are 2001:db8::123 and fe80::123, and $primary_if
is xennet0, I've gotten `npfctl list -n' to show alternately

# src-addr:port       dst-addr:port         interface  nat-addr:port
[2001:db8::123]:65478 [2001:db8::123]:80    xennet0    [fe80::123]:8000

or

# src-addr:port       dst-addr:port         interface  nat-addr:port
[2001:db8::123]:65478 [2001:db8::123]:80    xennet0    [2001:db8::123]:8000

(but I was flailing around a lot and don't remember exactly which set
of options led to which output).  Note that in all my attempts, it
showed xennet0 ($primary_if), never lo0!  Perhaps that is a clue that
will lead to the source of the problem: v4 is getting mapped through
lo0, but v6 is getting mapped through $primary_if instead.



Home | Main Index | Thread Index | Old Index