[2/3] firewall: Explicitely don't NAT any aliases
Commit Message
It seems that there is a problem with local connections that have
preselected an outgoing interface. That will work just fine, but
ultimately the packet will be NATed back to the primary RED IP address.
To prevent this, we are adding some extra rules that skip the MASQUERADE
target.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
---
src/initscripts/system/firewall | 5 +++++
src/initscripts/system/functions | 15 +++++++++++++++
2 files changed, 20 insertions(+)
@@ -495,6 +495,11 @@ iptables_red_up() {
NO_MASQ_NETWORKS+=( "${ORANGE_NETADDRESS}/${ORANGE_NETMASK}" )
fi
+ local alias
+ for alias in $(get_aliases); do
+ NO_MASQ_NETWORKS+=( "${alias}" )
+ done
+
local network
for network in ${NO_MASQ_NETWORKS[@]}; do
iptables -t nat -A REDNAT -s "${network}" -o "${IFACE}" -j RETURN
@@ -935,3 +935,18 @@ readhash() {
printf -v "${array}[${key}]" "%s" "${val}"
done < "${file}"
}
+
+# Returns all enabled aliases
+get_aliases() {
+ local address
+ local enabled
+ local rest
+
+ local IFS=,
+
+ while read -r address enabled rest; do
+ if [ "${enabled}" = "on" ]; then
+ echo "${address}"
+ fi
+ done < /var/ipfire/ethernet/aliases
+}