NAT (Network Address Translation) — это технология, используемая в сетевых устройствах (например, маршрутизаторах или фаерволах) для преобразования IP-адресов и портов в процессе передачи сетевых пакетов. Основная цель NAT — обеспечить возможность множества устройств в локальной сети использовать один публичный IP-адрес для выхода в интернет.
Private IP vs Public IP:
192.168.1.1
), которые не маршрутизируются в интернете.203.0.113.1
) назначается маршрутизатору провайдером.Процесс трансляции:
Пример NAT-таблицы:
| Private IP | Private Port | Public IP | Public Port | Protocol |
|--------------|--------------|--------------|-------------|----------|
| 192.168.1.10 | 54321 | 203.0.113.1 | 12345 | TCP |
Static NAT (1:1):
Dynamic NAT (N:M):
PAT (Port Address Translation, или NAT Overload):
package main
import "fmt"
type NATTableEntry struct {
PrivateIP string
PrivatePort int
PublicPort int
}
func main() {
natTable := make(map[string]NATTableEntry)
natTable["192.168.1.10:54321"] = NATTableEntry{
PrivateIP: "192.168.1.10",
PrivatePort: 54321,
PublicPort: 12345,
}
fmt.Printf("NAT Table: %+v\n", natTable)
}
NAT — это критически важная технология для работы интернета в условиях нехватки IPv4-адресов. Он обеспечивает безопасность и гибкость, но требует внимания при настройке сложных сетевых приложений.