Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Oct 2015 13:50:04 +1000
From:      Nathan Aherne <nathan@reddog.com.au>
To:        Ian Smith <smithi@nimnet.asn.au>
Cc:        freebsd-ipfw@freebsd.org
Subject:   Re: Kernel NAT issues
Message-ID:  <C1C25100-FBD4-42F4-94F7-965B270D927F@reddog.com.au>
In-Reply-To: <20151013142301.B67283@sola.nimnet.asn.au>
References:  <94B91F98-DE01-4A10-8AB5-4193FE11AF3F@reddog.com.au> <20151013142301.B67283@sola.nimnet.asn.au>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi Ian,

Thank you for your response.

I didn=E2=80=99t post my ruleset because I should be able to fix the =
issue myself but I see now that my request to explain =E2=80=9Chow NAT =
works=E2=80=9D was incorrect.

I have now included my ruleset below (as well as my initial email).

# Enable NAT
ipfw nat 1 config ip $jip same_ports log


00005 allow ip from any to any via lo0
00006 deny ip from any to not me in via bce0
00100 nat 1 log ip from any to AAA.BBB.CCC.DDD recv bce0
00101 check-state
00110 allow icmp from any to WWW.XXX.YYY <http://www.xxx.yyy/>.ZZZ recv =
bce0 keep-state
00111 allow tcp from any to WWW.XXX.YYY <http://www.xxx.yyy/>.ZZZ =
dst-port 65222 recv bce0 setup keep-state
00112 allow icmp from WWW.XXX.YYY <http://www.xxx.yyy/>.ZZZ to any xmit =
bce0 keep-state
00113 allow tcp from WWW.XXX.YYY <http://www.xxx.yyy/>.ZZZ to any =
dst-port 53,80,443,22,65222 xmit bce0 setup keep-state
00114 allow udp from WWW.XXX.YYY <http://www.xxx.yyy/>.ZZZ to any =
dst-port 53,123 xmit bce0 keep-state
00120 skipto 65501 log tcp from any to 10.0.0.0/16 recv bce0 setup =
keep-state
00121 skipto 65501 log udp from any to 10.0.0.0/16 recv bce0 keep-state
00122 skipto 65501 log tcp from 10.0.0.0/16 to not 10.0.0.0/16 xmit bce0 =
setup keep-state
00123 skipto 65501 log udp from 10.0.0.0/16 to not 10.0.0.0/16 xmit bce0 =
keep-state
00200 allow log tcp from any to 10.0.0.1 dst-port 22,80,443 in setup =
keep-state
00200 allow log tcp from 10.0.0.1 to any dst-port 22,80,443 out setup =
keep-state
00200 allow log udp from 10.0.0.1 to any dst-port 53 out keep-state
00201 allow log tcp from any to 10.0.0.2 dst-port 22,80,443 in setup =
keep-state
00201 allow log tcp from 10.0.0.2 to any dst-port 22,80,443 out setup =
keep-state
00201 allow log udp from 10.0.0.2 to any dst-port 53 out keep-state
65500 deny log ip from any to any
65501 nat 1 log ip from 10.0.0.0/16 to not 10.0.0.0/16 xmit bce0 =
keep-state
65502 allow log ip from AAA.BBB.CCC.DDD to any xmit bce0 keep-state
65534 deny log ip from any to any
65535 deny ip from any to any

=
**************************************************************************=
************
I sent through a question to this list a little while ago and have been =
trying to get IPFW NAT working since then. I have had some success but =
not the success I need, everything is working correctly except NAT rules =
for my particular use case.=20

I have read every Google result on the first 50 pages when searching for =
=E2=80=9CIPFW NAT=E2=80=9D or =E2=80=9CIPFW kernel NAT=E2=80=9D. I would =
really appreciate it if someone could help me out.

My use case is as follows:

1. I need to use hairpin NAT - I am using Jails behind a http proxy and =
some jails need to be able to communicate with each other but only over =
the WAN IP. This is why I have not use PF.
2. Some jails need to be able to communicate with each other on the =
private interface (lo1)
3. IPFW is configured as default deny
4. Each jail has a list of allowed ports for incoming and outgoing =
connections, these are set on the jails private IP (10.0.0.0/16)
5. I am using a stateful firewall.

At the moment I am testing my IPFW ruleset using =E2=80=9Chost =
google.com <http://google.com/>; <http://google.com/ =
<http://google.com/>>=E2=80=9D I can see the traffic leave the Jail, get =
natted, the response come back from 8.8.8.8 and the traffic is then =
denied. It seems like the state is not being checked or my rules are in =
the wrong place. I feel that I should be able to fix this but I am =
obviously misunderstanding is how NAT works.=20

I was under the assumption that traffic flowed like this:

1. Traffic comes from Jail 10.0.0.1 on lo1 interface, if traffic is for =
public IP, the traffic is natted, it goes out the WAN interface, comes =
back, is natted and switched to lo1 interface, state is checked and it =
passes as returning traffic.

2. Traffic comes from Jail 10.0.0.1 on lo1 interface, if traffic is for =
private IP, the traffic is not natted, it stays on the lo1 interface and =
goes directly to the 10.0.0.2 Jail.

I know I could answer my last question if =E2=80=9CI read the code=E2=80=9D=
 and I have tried but am not getting it. Is my understanding of IPFW =
kernel NAT correct?

Regards,

Nathan

_______________________________________________
freebsd-ipfw@freebsd.org <mailto:freebsd-ipfw@freebsd.org> mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-ipfw =
<https://lists.freebsd.org/mailman/listinfo/freebsd-ipfw>;
To unsubscribe, send any mail to "freebsd-ipfw-unsubscribe@freebsd.org =
<mailto:freebsd-ipfw-unsubscribe@freebsd.org>=E2=80=9D

=
**************************************************************************=
************

Regards,

Nathan

> On 13 Oct 2015, at 1:37 pm, Ian Smith <smithi@nimnet.asn.au> wrote:
>=20
> On Tue, 13 Oct 2015 12:33:52 +1000, Nathan Aherne wrote:
>=20
>> I sent through a question to this list a little while ago and have=20
>> been trying to get IPFW NAT working since then. I have had some=20
>> success but not the success I need, everything is working correctly=20=

>> except NAT rules for my particular use case.
>=20
> Unfortunately the rest of your message failed to quote properly here,=20=

> i.e not quoted indented as above, so I'll leave it out for now; =
perhaps=20
> it's my old mailer (pine) at fault.  Maybe plain ASCII text would =
help.
>=20
> That said, without sharing your actual ruleset with us, sanitised if=20=

> need be, it seems unlikely that anyone will be able to work out what=20=

> might be happening here solely from your textual description.
>=20
> cheers, Ian




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?C1C25100-FBD4-42F4-94F7-965B270D927F>