Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revisionBoth sides next revision | ||
| docs:guide-user:firewall:fw3_configurations:fw3_nat [2023/09/01 16:55] – [NPT] [IPv6 NPT] vgaetera | docs:guide-user:firewall:fw3_configurations:fw3_nat [2023/11/01 22:14] – [IPv6 to IPv4 NAT with Tayga] update vgaetera | ||
|---|---|---|---|
| Line 215: | Line 215: | ||
| </ | </ | ||
| - | ==== FTP passthrough | + | ===== Extras ===== |
| - | See also: | + | ==== NAT ==== |
| - | [[packages: | + | Enable masquerading aka NAT on the WAN zone. |
| <code bash> | <code bash> | ||
| - | opkg update | + | uci set firewall.@zone[1].masq=" |
| - | opkg install kmod-nf-nathelper | + | uci commit firewall |
| - | / | + | service |
| </ | </ | ||
| - | ==== SIP passthrough | + | ==== IPv6 NAT ==== |
| - | See also: | + | Enable IPv6 masquerading aka NAT66 on the WAN zone. |
| - | [[packages: | + | |
| <code bash> | <code bash> | ||
| - | opkg update | + | uci set firewall.@zone[1].masq6=" |
| - | opkg install kmod-nf-nathelper-extra | + | uci commit firewall |
| - | / | + | service |
| </ | </ | ||
| - | ==== Custom TTL and hop limit ==== | + | Announce IPv6 default route for the ULA prefix. |
| <code bash> | <code bash> | ||
| - | cat << | + | uci set dhcp.lan.ra_default="1" |
| - | NET_DEV=" | + | uci commit dhcp |
| - | NET_TTL="65" | + | service odhcpd restart |
| - | nft add rule inet fw4 mangle_postrouting \ | + | </code> |
| - | oifname ${NET_DEV} ip ttl set ${NET_TTL} | + | |
| - | nft add rule inet fw4 mangle_postrouting \ | + | Disable IPv6 source filter on the upstream interface. |
| - | oifname ${NET_DEV} ip6 hoplimit set ${NET_TTL} | + | |
| - | EOF | + | <code bash> |
| - | uci -q delete firewall.ttl | + | uci set network.wan6.sourcefilter="0" |
| - | uci set firewall.ttl="include" | + | uci commit network |
| - | uci set firewall.ttl.path="/ | + | service network restart |
| + | </ | ||
| + | |||
| + | ==== Selective NAT ==== | ||
| + | Enable masquerading selectively for a specific source subnet. | ||
| + | |||
| + | <code bash> | ||
| + | uci -q delete firewall.nat | ||
| + | uci set firewall.nat="nat" | ||
| + | uci set firewall.nat.family="ipv4" | ||
| + | uci set firewall.nat.proto=" | ||
| + | uci set firewall.nat.src=" | ||
| + | uci set firewall.nat.src_ip=" | ||
| + | uci set firewall.nat.target=" | ||
| uci commit firewall | uci commit firewall | ||
| - | /etc/init.d/firewall restart | + | service firewall restart |
| + | </code> | ||
| + | |||
| + | ==== IPv6 selective NAT ==== | ||
| + | Enable IPv6 masquerading selectively for a specific source subnet. | ||
| + | |||
| + | <code bash> | ||
| + | uci -q delete firewall.nat6 | ||
| + | uci set firewall.nat6=" | ||
| + | uci set firewall.nat6.family=" | ||
| + | uci set firewall.nat6.proto=" | ||
| + | uci set firewall.nat6.src=" | ||
| + | uci set firewall.nat6.src_ip=" | ||
| + | uci set firewall.nat6.target=" | ||
| + | uci commit firewall | ||
| + | service | ||
| </ | </ | ||
| ==== NPT ==== | ==== NPT ==== | ||
| - | Replace masquerading with IPv4 to IPv4 network prefix translation. | + | Enable |
| <code bash> | <code bash> | ||
| cat << " | cat << " | ||
| - | NET_DEV=" | + | LAN_PFX=" |
| - | NET_SPFX=" | + | WAN_PFX=" |
| - | NET_DPFX=" | + | . / |
| + | network_flush_cache | ||
| + | network_find_wan WAN_IF | ||
| + | network_get_device WAN_DEV " | ||
| nft add rule inet fw4 srcnat \ | nft add rule inet fw4 srcnat \ | ||
| - | oifname ${NET_DEV} snat ip prefix to ip \ | + | oifname ${WAN_DEV} snat ip prefix to ip \ |
| - | saddr map { ${NET_SPFX} : ${NET_DPFX} } | + | saddr map { ${LAN_PFX} : ${WAN_PFX} } |
| EOF | EOF | ||
| - | uci -q delete firewall.@zone[1].masq | ||
| uci -q delete firewall.npt | uci -q delete firewall.npt | ||
| uci set firewall.npt=" | uci set firewall.npt=" | ||
| uci set firewall.npt.path="/ | uci set firewall.npt.path="/ | ||
| uci commit firewall | uci commit firewall | ||
| - | / | + | service |
| </ | </ | ||
| ==== IPv6 NPT ==== | ==== IPv6 NPT ==== | ||
| - | Replace IPv6 masquerading with IPv6 to IPv6 network prefix translation. | + | Enable |
| <code bash> | <code bash> | ||
| cat << " | cat << " | ||
| - | NET_DEV=" | + | LAN_PFX=" |
| - | NET_SPFX=" | + | . / |
| - | NET_DPFX="fd00:2::/64" | + | network_flush_cache |
| + | network_find_wan6 WAN_IF | ||
| + | network_get_device WAN_DEV " | ||
| + | network_get_prefix6 WAN_PFX | ||
| nft add rule inet fw4 srcnat \ | nft add rule inet fw4 srcnat \ | ||
| - | oifname ${NET_DEV} snat ip6 prefix to ip6 \ | + | oifname ${WAN_DEV} snat ip6 prefix to ip6 \ |
| - | saddr map { ${NET_SPFX} : ${NET_DPFX} } | + | saddr map { ${LAN_PFX} : ${WAN_PFX} } |
| EOF | EOF | ||
| - | uci -q delete firewall.@zone[1].masq6 | ||
| uci -q delete firewall.npt6 | uci -q delete firewall.npt6 | ||
| uci set firewall.npt6=" | uci set firewall.npt6=" | ||
| uci set firewall.npt6.path="/ | uci set firewall.npt6.path="/ | ||
| uci commit firewall | uci commit firewall | ||
| - | /etc/init.d/firewall restart | + | service firewall restart |
| + | </ | ||
| + | |||
| + | ==== Symmetric dynamic IPv6 NPT ==== | ||
| + | Enable symmetric dynamic IPv6 to IPv6 network prefix translation. | ||
| + | |||
| + | <code bash> | ||
| + | cat << " | ||
| + | LAN_IF=" | ||
| + | sleep 5 | ||
| + | . / | ||
| + | network_flush_cache | ||
| + | network_get_device LAN_DEV " | ||
| + | network_get_prefix_assignment6 LAN_PFX " | ||
| + | network_find_wan6 WAN_IF | ||
| + | network_get_device WAN_DEV " | ||
| + | network_get_prefix6 WAN_PFX " | ||
| + | nft add rule inet fw4 srcnat \ | ||
| + | oifname ${WAN_DEV} snat ip6 prefix to ip6 \ | ||
| + | saddr map { ${LAN_PFX} : ${WAN_PFX} } | ||
| + | nft add rule inet fw4 srcnat \ | ||
| + | oifname ${LAN_DEV} snat ip6 prefix to ip6 \ | ||
| + | saddr map { ${WAN_PFX} : ${LAN_PFX} } | ||
| + | EOF | ||
| + | uci -q delete firewall.npt6 | ||
| + | uci set firewall.npt6=" | ||
| + | uci set firewall.npt6.path="/ | ||
| + | uci commit firewall | ||
| + | service firewall restart | ||
| + | </ | ||
| + | |||
| + | ==== IPv6 to IPv4 NAT with Jool ==== | ||
| + | Enable IPv6 to IPv4 NAT aka NAT64 for IPv6-only networks with Jool. | ||
| + | Use DNS64 to resolve domain names. | ||
| + | |||
| + | <code bash> | ||
| + | opkg update | ||
| + | opkg install jool-tools-netfilter | ||
| + | . / | ||
| + | json_init | ||
| + | json_add_string " | ||
| + | json_add_string " | ||
| + | json_add_object " | ||
| + | json_add_string " | ||
| + | json_close_object | ||
| + | json_dump > / | ||
| + | uci set jool.general.enabled=" | ||
| + | uci set jool.nat64.enabled=" | ||
| + | uci commit jool | ||
| + | service jool restart | ||
| + | </ | ||
| + | |||
| + | ==== IPv6 to IPv4 NAT with Tayga ==== | ||
| + | Enable IPv6 to IPv4 NAT aka NAT64 for IPv6-only networks with Tayga. | ||
| + | Use DNS64 to resolve domain names. | ||
| + | |||
| + | <code bash> | ||
| + | opkg update | ||
| + | opkg install tayga | ||
| + | uci del_list firewall.lan.network=" | ||
| + | uci add_list firewall.lan.network=" | ||
| + | uci commit firewall | ||
| + | service firewall restart | ||
| + | uci -q delete network.nat64 | ||
| + | uci set network.nat64=" | ||
| + | uci set network.nat64.proto=" | ||
| + | uci set network.nat64.prefix=" | ||
| + | uci set network.nat64.ipv6_addr=" | ||
| + | uci set network.nat64.dynamic_pool=" | ||
| + | uci set network.nat64.ipv4_addr=" | ||
| + | uci commit network | ||
| + | service network restart | ||
| + | </ | ||
| + | |||
| + | ==== TTL ==== | ||
| + | Modify TTL for egress traffic. | ||
| + | |||
| + | <code bash> | ||
| + | cat << " | ||
| + | WAN_TTL=" | ||
| + | . / | ||
| + | network_flush_cache | ||
| + | network_find_wan WAN_IF | ||
| + | network_get_device WAN_DEV " | ||
| + | nft add rule inet fw4 mangle_postrouting \ | ||
| + | oifname ${WAN_DEV} ip ttl set ${WAN_TTL} | ||
| + | EOF | ||
| + | uci -q delete firewall.ttl | ||
| + | uci set firewall.ttl=" | ||
| + | uci set firewall.ttl.path="/ | ||
| + | uci commit firewall | ||
| + | service firewall restart | ||
| + | </ | ||
| + | |||
| + | ==== IPv6 hop limit ==== | ||
| + | Modify IPv6 hop limit for egress traffic. | ||
| + | |||
| + | <code bash> | ||
| + | cat << " | ||
| + | WAN_HLIM=" | ||
| + | . / | ||
| + | network_flush_cache | ||
| + | network_find_wan6 WAN_IF | ||
| + | network_get_device WAN_DEV " | ||
| + | nft add rule inet fw4 mangle_postrouting \ | ||
| + | oifname ${WAN_DEV} ip6 hoplimit set ${WAN_HLIM} | ||
| + | EOF | ||
| + | uci -q delete firewall.hlim | ||
| + | uci set firewall.hlim=" | ||
| + | uci set firewall.hlim.path="/ | ||
| + | uci commit firewall | ||
| + | service firewall restart | ||
| + | </ | ||
| + | |||
| + | ==== FTP passthrough ==== | ||
| + | Enable NAT passthrough for FTP using [[packages: | ||
| + | |||
| + | <code bash> | ||
| + | opkg update | ||
| + | opkg install kmod-nf-nathelper | ||
| + | service firewall restart | ||
| + | </ | ||
| + | |||
| + | ==== SIP passthrough ==== | ||
| + | Enable NAT passthrough for SIP, PPTP, GRE, etc. using [[packages: | ||
| + | |||
| + | <code bash> | ||
| + | opkg update | ||
| + | opkg install kmod-nf-nathelper-extra | ||
| + | service firewall restart | ||
| + | </ | ||
| + | |||
| + | ==== RTSP passthrough ==== | ||
| + | Enable NAT passthrough for RTSP using [[packages: | ||
| + | |||
| + | <code bash> | ||
| + | opkg update | ||
| + | opkg install kmod-ipt-nathelper-rtsp | ||
| + | service | ||
| </ | </ | ||