SHOREWALL-NAT(5)
π SHOREWALL-NAT π β aka nat(5), the one-to-one NAT file, bestie edition
okay so you opened the manual page called SHOREWALL-NAT(5), which lives in the Configuration Files section, and I'm here to make it not boring. grab a strawberry π, we're doing Network Address Translation.
β¨ NAME β¨
nat β the Shorewall one-to-one NAT file. that's it, that's the name π
π¦ SYNOPSIS π¦
/etc/shorewall/nat
πΈ DESCRIPTION πΈ
so this file is where you define one-to-one Network Address Translation (NAT). like, one external IP gets married to one internal IP. monogamy but for packets π«Ά
β οΈ Warning, and I need you to actually read this one bestie: if all you want to do is simple port forwarding, do NOT use this file. go look athttps://shorewall.org/FAQ.htm#faq1. also, in many cases, Proxy ARP (shorewall-proxyarp(5)) or Proxy-NDP (shorewall6-proxyndp(5)) is a better solution than one-to-one NAT. fr fr.
The columns in the file go like this (and where a column name is followed by a different name in parentheses, that different name is the one used in the alternate specification syntax).
EXTERNALβ{address|?COMMENT}
External IP Address. this should NOT be the primary IP address of the interface named in the next column, and it must not be a DNS Name. periodt.
If you put ?COMMENT in this column, the rest of the line gets attached as a comment to the Netfilter rule(s) generated by the following entries in the file. that comment shows up delimited by "/* ... */" in the output of "shorewall show nat" π
And to stop the comment from being attached to further rules, just put ?COMMENT on a line by itself. simple.
INTERFACEβinterfacelist[:[digit]]
Interfaces that have the EXTERNAL address. If ADD_IP_ALIASES=Yes in shorewall.conf(5), Shorewall will automatically add the EXTERNAL address to this interface. Also, if ADD_IP_ALIASES=Yes, you may follow the interface name with ":" and a digit to indicate that you want Shorewall to add the alias with this name (e.g. "eth0:0"). that's what lets you see the alias with ifconfig. and honestly that is the only thing that this name is good for β you cannot use it anywhere else in your Shorewall configuration π
Each interface must match an entry in shorewall-interfaces(5). Shorewall allows loose matches to wildcard entries in shorewall-interfaces(5). for example, ppp0 in this file will match a shorewall-interfaces(5) entry that defines ppp+. slay.
If you want to override ADD_IP_ALIASES=Yes for a particular entry, follow the interface name with ":" and no digit (e.g. "eth0:").
INTERNALβaddress
Internal Address (must not be a DNS Name).
ALLINTSβ[Yes|No]
If Yes or yes, NAT will be effective from all hosts. If No or no (or left empty) then NAT will be effective only through the interface named in the INTERFACE column.
This column was formerly labelled ALL INTERFACES. glow-up moment β¨
LOCALβ[Yes|No]
If Yes or yes, NAT will be effective from the firewall system
...and that is literally where the page ends bestie, no cap ππ moving on!
π§ RESTRICTIONS π§
DNAT rules always preempt one-to-one NAT rules. this has subtile consequences when there are sub-zones on an interface. consider the following, bestie:
/etc/shorewall/zones:
#ZONE TYPE OPTIONS IN OUT
# OPTIONS OPTIONS
fw firewall
net ipv4
loc ipv4
smc:net ipv4
/etc/shorewall/interfaces:
#ZONE INTERFACE OPTIONS
net eth0 dhcp,tcpflags,nosmurfs,routefilter,logmartians,sourceroute=0
loc eth1 tcpflags,nosmurfs,routefilter,logmartians
/etc/shorewall/hosts:
#ZONE HOST(S) OPTIONS
smc eth0:10.1.10.0/24
/etc/shorewall/nat:
#EXTERNAL INTERFACE INTERNAL ALLINTS LOCAL
10.1.10.100 eth0 172.20.1.100
Note that the EXTERNAL address is in the smc zone. okay? okay.
/etc/shorewall/rules:
#ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST RATE USER MARK CONNLIMIT TIME HEADERS SWITCH HELPER
?SECTION ALL
?SECTION ESTABLISHED
?SECTION RELATED
?SECTION INVALID
?SECTION UNTRACKED
?SECTION NEW
...
DNAT net loc:172.20.1.4 tcp 80
For the one-to-one NAT to work correctly in this configuration, one of two approaches can be taken:
- Define a
CONTINUEpolicy withsmcas theSOURCEzone (preferred π₯):
#SOURCE DEST POLICY LOG LEVEL LIMIT:BURST
smc $FW CONTINUE
loc net ACCEPT
net all DROP info
# THE FOLLOWING POLICY MUST BE LAST
all all REJECT info
- Set
IMPLICIT_CONTINUE=Yesinshorewall.conf(5).
π FILES π
/etc/shorewall/nat/etc/shorewall6/nat
π SEE ALSO π
https://shorewall.org/NAT.htmhttps://shorewall.org/configuration_file_basics.htm#Pairsshorewall(8)
π NOTES π
https://shorewall.org/FAQ.htm#faq1βhttps://shorewall.org/FAQ.htm#faq1shorewall-proxyarpβhttps://shorewall.org/manpages/shorewall-proxyarp.htmlshorewall6-proxyndpβhttps://shorewall.org/manpages/shorewall6-proxyndp.htmlshorewall.confβhttps://shorewall.org/manpages/shorewall.conf.htmlshorewall-interfacesβhttps://shorewall.org/manpages/shorewall-interfaces.htmlhttps://shorewall.org/NAT.htmβhttps://shorewall.org/NAT.htmhttps://shorewall.org/configuration_file_basics.htm#Pairsβhttps://shorewall.org/configuration_file_basics.htm#Pairs
and that's the whole page, bestie!! πβ¨ this icon of a manpage comes from the Configuration Files section, it's dated 09/24/2020, and its manual name is SHOREWALL-NAT(5). go configure responsibly, mwah π
π«Άπ¦
π¦ where this page comes from
- alpine 3.22: shorewall-doc 5.2.8-r1 Β· GPL-2.0-or-later
- alpine 3.23: shorewall-doc 5.2.8-r1 Β· GPL-2.0-or-later
- alpine 3.24: shorewall-doc 5.2.8-r1 Β· GPL-2.0-or-later
- debian bookworm: shorewall 5.2.8-2 Β· GPL-2.0-or-later
- debian trixie: shorewall 5.2.8-6 Β· GPL-2.0-or-later
- fedora 43: shorewall 5.2.8-17.fc43 Β· GPL-2.0-or-later
- fedora 44: shorewall 5.2.8-18.fc44 Β· GPL-2.0-or-later
- nixos 26.05: shorewall 5.2.8
- nixpkgs unstable: shorewall 5.2.8
- ubuntu noble: shorewall 5.2.8-5 Β· GPL-2.0-or-later
- ubuntu questing: shorewall 5.2.8-6
- ubuntu resolute: shorewall 5.2.8-6build1 Β· GPL-2.0-or-later
- ubuntu stonking: shorewall 5.2.8-6build1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms