What does it mean outbound NAT?
Outbound NAT translates the source IP addresses of packets sent from a high-priority security zone to a low-priority one.
I allowed myself to post a flowchart of configuring intranet users to access extranet through NAT (from Huawei documentation):

It easily lets us to choose a suitable way of configuring outbound NAT. In this lab I will try to do a review of these methods.
Let’s look at the topology:

Just forget about FTP server and focus on the bottom of the topology. We will use the FTP server in one of the next articles.
The main requirement in this lab is to configure the firewall, to provide access to the Internet for intranet users, on network segment 10.0.0.0/24.
The configuration of NAT for all above methods is the same. The difference lies in the configuration of NAT address group.
Let’s start!
Set IP addresses of interfaces and add the interfaces to proper security zones:
[SRG]display current-configuration interface GigabitEthernet
#
interface GigabitEthernet0/0/2
ip address 1.1.1.1 255.255.255.0
#
interface GigabitEthernet0/0/3
#
interface GigabitEthernet0/0/3.100
vlan-type dot1q 100
alias GigabitEthernet0/0/3.100
ip address 10.0.0.1 255.255.255.0
#
[SRG]display current-configuration | begin firewall zone
#
firewall zone trust
set priority 85
add interface GigabitEthernet0/0/3.100
#
firewall zone untrust
set priority 5
add interface GigabitEthernet0/0/2
Configure L2 communication on the LAN switch:
#
vlan batch 100
#
interface Ethernet0/0/2
port link-type access
port default vlan 100
#
interface Ethernet0/0/3
port link-type access
port default vlan 100
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 100
Ensure that the users on network segment 10.0.0.0/24 can access the Untrust zone:
[SRG]policy interzone trust untrust outbound
[SRG-policy-interzone-trust-untrust-outbound]policy 1
[SRG-policy-interzone-trust-untrust-outbound-1]policy source 10.0.0.0 mask 24
[SRG-policy-interzone-trust-untrust-outbound-1]action permit
And now the promised configuration of NAT. In this case one private IP address will correspond to one public IP address. To achive it, I will create NAT address group with No-PAT option. NAT No-PAT is also called one-to-one address translation. During the translation, the source IP address of a packet is translated from a private IP address into a public IP address, while the port number is not translated. It means that, when a private network host adopts one public IP address, this address cannot be used by another host because all the ports of public IP address are occupied.
Create NAT address group:
[SRG]nat address-group 1 1.1.1.20 1.1.1.25
Configure NAT policy for the TRUST-UNTRUST interzone, define the range of source IP addresses for NAT and bind the NAT policy to the previousely created NAT address pool:
[SRG]nat-policy interzone trust untrust outbound
[SRG-nat-policy-interzone-trust-untrust-outbound]policy 1
[SRG-nat-policy-interzone-trust-untrust-outbound-1]action source-nat
[SRG-nat-policy-interzone-trust-untrust-outbound-1]policy source 10.0.0.0 mask 24
[SRG-nat-policy-interzone-trust-untrust-outbound-1]address-group 1 no-pat
Let’s verify if it is working correctly. Just try to ping interface loopback of Internet router (5.5.5.5/32) from the both hosts:
User_1>ping 5.5.5.5
Ping 5.5.5.5: 32 data bytes, Press Ctrl_C to break
From 5.5.5.5: bytes=32 seq=1 ttl=254 time=47 ms
From 5.5.5.5: bytes=32 seq=2 ttl=254 time=46 ms
From 5.5.5.5: bytes=32 seq=3 ttl=254 time=63 ms
From 5.5.5.5: bytes=32 seq=4 ttl=254 time=63 ms
From 5.5.5.5: bytes=32 seq=5 ttl=254 time=47 ms
--- 5.5.5.5 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 46/53/63 ms
User_2>ping 5.5.5.5
Ping 5.5.5.5: 32 data bytes, Press Ctrl_C to break
From 5.5.5.5: bytes=32 seq=1 ttl=254 time=47 ms
From 5.5.5.5: bytes=32 seq=2 ttl=254 time=46 ms
From 5.5.5.5: bytes=32 seq=3 ttl=254 time=62 ms
From 5.5.5.5: bytes=32 seq=4 ttl=254 time=46 ms
From 5.5.5.5: bytes=32 seq=5 ttl=254 time=47 ms
--- 5.5.5.5 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 46/49/62 ms
Check if the session entry of firewall has been created succesfully:
[SRG]display firewall session table
Current Total Sessions : 15
icmp VPN:public --> public 10.0.0.11:41543[1.1.1.21:41543]-->5.5.5.5:2048
icmp VPN:public --> public 10.0.0.10:41031[1.1.1.20:41031]-->5.5.5.5:2048
[SRG]display firewall session table verbose
Current Total Sessions : 50
icmp VPN:public --> public
Zone: trust--> untrust TTL: 00:00:20 Left: 00:00:00
Interface: GigabitEthernet0/0/2 NextHop: 1.1.1.2 MAC: 54-89-98-5c-36-fb
<--packets:1 bytes:60 -->packets:1 bytes:60
10.0.0.10:50247[1.1.1.20:50247]-->5.5.5.5:2048
icmp VPN:public --> public
Zone: trust--> untrust TTL: 00:00:20 Left: 00:00:00
Interface: GigabitEthernet0/0/2 NextHop: 1.1.1.2 MAC: 54-89-98-5c-36-fb
<--packets:1 bytes:60 -->packets:1 bytes:60
10.0.0.11:50247[1.1.1.21:50247]-->5.5.5.5:2048
Check whether the server-map entry is successfully created:
<SRG>display firewall server-map
server-map item(s)
------------------------------------------------------------------------------
No-Pat, 10.0.0.10[1.1.1.20] -> any, Zone: ---
Protocol: any(Appro: ---), Left-Time: 00:11:59, Addr-Pool: 1
VPN: public -> public
No-Pat Reverse, any -> 1.1.1.20[10.0.0.10], Zone: untrust
Protocol: any(Appro: ---), Left-Time: --:--:--, Addr-Pool: ---
VPN: public -> public
No-Pat, 10.0.0.11[1.1.1.21] -> any, Zone: ---
Protocol: any(Appro: ---), Left-Time: 00:11:59, Addr-Pool: 1
VPN: public -> public
No-Pat Reverse, any -> 1.1.1.21[10.0.0.11], Zone: untrust
Protocol: any(Appro: ---), Left-Time: --:--:--, Addr-Pool: ---
VPN: public -> public
Now we can create another NAT address group with only one address available to check NAPT:
#
nat address-group 2 1.1.1.30 1.1.1.30
#
nat-policy interzone trust untrust outbound
policy 1
action source-nat
policy source 10.0.0.0 mask 24
address-group 2
[SRG]display firewall session table
Current Total Sessions : 53
icmp VPN:public --> public 10.0.0.10:54605[1.1.1.30:2067]-->5.5.5.5:2048
icmp VPN:public --> public 10.0.0.11:55117[1.1.1.30:2070]-->5.5.5.5:2048
And finally NAT easy IP:
#
nat-policy interzone trust untrust outbound
policy 1
action source-nat
policy source 10.0.0.0 mask 24
easy-ip GigabitEthernet0/0/2
#
[SRG]display firewall session table
Current Total Sessions : 50
icmp VPN:public --> public 10.0.0.10:34127[1.1.1.1:17133]-->5.5.5.5:2048
icmp VPN:public --> public 10.0.0.11:34383[1.1.1.1:17134]-->5.5.5.5:2048
If the interface IP address is adopted as the public IP address directly, no NAT address pool is required.