Зачем вообще нужен
Когда у тебя пакет на 8.8.8.8, ты делаешь два вопроса:
- Это в моей подсети? Сравниваем IP+маска с локальной сетью. Если да - шлём напрямую через arp и Ethernet-фрейм
- Если нет - куда вообще слать? Тут вступает default gateway: специальный маршрут «всё что я не знаю - отдай этому роутеру»
В Linux это выглядит так:
$ ip route
default via 192.168.1.1 dev eth0 # ← вот он, default gateway
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.50
Первая строка = «всё неизвестное → шлём в 192.168.1.1». Вторая = «своя
подсеть → напрямую через eth0».
Откуда берётся
Три типичных пути:
- DHCP даёт его в опции 3 (router). Дома - это твой Wi-Fi-роутер
- Прописан вручную (
/etc/network/interfaces, NetworkManager, cloud-init) - Получен через RA (router advertisement) в IPv6
Как используется
Когда пакет на 8.8.8.8 уходит:
- Стек смотрит routing-table. Match для
8.8.8.8=default - Default route говорит: next hop =
192.168.1.1 - Стек смотрит -
192.168.1.1это в моей подсети, шлю L2-фреймом - ARP по
192.168.1.1→ получаем MAC роутера - Кладём фрейм с dst MAC = MAC роутера, dst IP = 8.8.8.8
- Роутер ловит фрейм, видит что dst IP не его, идёт по своей таблице
Важный момент: в L2-заголовке destination - это MAC шлюза, не
конечного сервера. На L3 destination остаётся 8.8.8.8. На каждом хопе
L2-заголовок переписывается, L3 - нет.
Несколько gateway'ев
- Multiple default routes с разными метриками - для failover между провайдерами или Wi-Fi/Ethernet
- Policy routing (
ip rule) - разные gateway'и для разных source IP или меток netfilter - VPN'ы часто меняют default gateway на туннель - поэтому весь трафик идёт через VPN
Когда ломается
- Нет default route - пингуешь
8.8.8.8, получаешьnetwork is unreachable. Лечитсяip route add default via X - Gateway недоступен - пакеты уходят, но ARP не находит MAC. Видно
в
ip neighкакFAILED - Wrong gateway (не в твоей подсети) - стек его сразу отвергает, «next hop is not directly reachable»