In Linux networking, the scope
parameter in ip address add
determines the visibility and routing behavior of an IP address within different network domains. This concept is crucial for:
- Network segmentation
- Routing table optimization
- Address conflict prevention
- Security zone isolation
Here's the technical breakdown of each scope type with implementation examples:
Global Scope
Addresses reachable through the entire network infrastructure:
sudo ip address add 192.168.1.10/24 dev eth0 scope global
Typical use cases:
- Public-facing server IPs
- Default gateway addresses
- Inter-VLAN routing interfaces
Site Scope
IPv6-specific scope for site-local addressing (deprecated in favor of ULA):
sudo ip address add fec0::1/64 dev eth0 scope site
Link Scope
Addresses valid only on the local network segment:
sudo ip address add 169.254.1.1/16 dev eth0 scope link
Common applications:
- IPv4 link-local addresses (APIPA)
- Point-to-point connections
- VXLAN VTEP interfaces
Host Scope
Addresses only visible to the local machine:
sudo ip address add 127.0.1.1/8 dev lo scope host
The scope affects kernel routing decisions. You can verify scope assignments with:
ip -4 address show
ip -6 address show
Scope impacts appear in the routing table:
ip route show table all
Combining scopes for complex networking:
# Multi-homed server configuration
sudo ip address add 203.0.113.45/24 dev eth0 scope global
sudo ip address add 10.0.0.1/24 dev eth1 scope site
sudo ip address add 192.168.100.1/24 dev eth2 scope link
For container networking:
# Docker bridge network scope
sudo ip address add 172.17.0.1/16 dev docker0 scope link
Common problems and solutions:
- Address unreachable: Verify scope matches network topology
- Routing loops: Check for conflicting global and link scope addresses
- IPv6 connectivity: Ensure proper scope assignment for SLAAC addresses
Example diagnostic command:
ip -d address show
The scope
parameter in Linux's ip address add
command defines the topological area where an IP address is valid. This concept is crucial for network configuration, routing decisions, and system security. The four possible values (global, site, link, host) determine how far packets with this address can travel in the network.
Here's what each scope actually means in practical networking terms:
- global: The address is valid everywhere (Internet-routable)
- site (IPv6 only): Valid within the local site (organization)
- link: Only valid on the local network segment
- host: Only valid inside the host (loopback-like)
Here are some common use cases with actual command examples:
# Adding a global (public) IP address
ip address add 192.0.2.1/24 dev eth0 scope global
# Adding a link-local address (IPv4)
ip address add 169.254.1.1/16 dev eth0 scope link
# Adding a host-scoped address (similar to loopback)
ip address add 198.51.100.1/32 dev lo scope host
When writing network configuration scripts, proper scope assignment prevents routing issues:
#!/bin/bash
# Configure a dual-stack host with proper scopes
# Public IPv4 (globally routable)
ip address add 203.0.113.45/24 dev eth0 scope global
# IPv6 ULA (site-local)
ip -6 address add fd42:dead:beef::1/64 dev eth0 scope site
# IPv6 link-local (automatic configuration)
ip -6 address add fe80::1/64 dev eth0 scope link
# Verification
ip address show dev eth0
Developers often encounter these issues with IP address scopes:
- Missing scope for link-local addresses: Causes routing issues in IPv6
- Incorrect scope for VPN interfaces: May leak or block traffic
- Scope mismatch in containers: Leads to connectivity problems in Docker/Kubernetes
The scope parameter interacts with Linux's routing tables. For example:
# Route only for host-scoped addresses
ip route add scope host 192.168.1.1 dev lo
# Shows how scope affects routing decisions
ip route show table local