A common way to realise a Load balancing is happening based on NAPT (Network Address Port Translation).
Client 1 Client 2 Client 3
SRC: 10.11.12.13:111 SRC: 10.11.12.13:222 SRC: 15.16.17.18:111
DST: 20.21.22.23:443 DST: 20.21.22.23:80 DST: 20.21.22.23:443
| | |
|----------| | |----------| WAN
-----------------------------------------------------------------------------
↓ ↓ ↓ LAN
|--------------------------------|
| LB Session Table | WAN to LAN:
|--------------------------------| Modifies Dest.-IP
| Public Addr | Private Addr | (Public --> Private)
Public IPv4 from ISP: |--------------------------------|
20.21.22.23 | 10.11.12.13:111 | 10.0.0.1:443 | LAN to WAN:
| 10.11.12.13:222 | 10.0.0.2:80 | Modifies Source-IP
| 15.16.17.18:111 | 10.0.0.3:443 | (Private --> Public)
|--------------------------------|
| | |
|----------| | |----------|
↓ ↓ ↓
Server 1 Server 2 Server 3
SRC: 10.11.12.13:111 SRC: 10.11.12.13:222 SRC: 15.16.17.18:111
DST: 10.0.0.1:443 DST: 10.0.0.2:80 DST: 10.0.0.3:443
PS: Another possibility is using DNS, which circles on a list of server IP’s on each request.