Почему не работает без маскарада?
У меня есть маршрутизатор - G, мой рабочий стол - D, ноутбук - L. Я хочу подключить L к Интернету через D.
G на 192.168.1.1
D: enp1s0 - 192.168.1.2/24, gw G, eno1 - 10.0.0.1/16, служит маршрутизатором для L
L: enp1s0 - 10.0.0.2, gw 10.0.0.1. Таблицы маршрутизации на L:
netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 enp1s0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 enp1s0
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
Переадресация пакетов в D включена:
sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
Однако L не подключается к Интернету:
traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 10.0.0.1 (10.0.0.1) 0.346 ms 0.339 ms *
2 10.0.0.1 (10.0.0.1) 0.370 ms !X * *
Очевидно, что пакеты L могут достигать D, но они не могут проходить дальше.
Однако L подключается, когда я включаю маскировку на D:
firewall-cmd --zone=public --add-masquerade=yes
success
Можете ли вы объяснить, почему L подключается к Интернету только в том случае, если включено маскирование на интерфейсе D (который напрямую связан с L)?
1 ответ
Причина, по которой вам нужен MASQUERADE, заключается в том, как работает NAT.
Рассмотрим ваш маршрутизатор G. Он получает IP-адрес от интернет-провайдера. Этот IP-адрес является тем, что все системы за маршрутизатором выходят в Интернет, поэтому все системы маскируются под этот IP-адрес. (Вот как работают маршрутизаторы, в жилых базовых установках).
Ваш компьютер D, выступающий в качестве шлюза NAT для вашего ноутбука L, подчиняется тем же правилам работы Интернета. В идеале вы должны иметь хотя бы один внутренний IP-адрес, а когда он запрашивает ресурс, отличный от других компьютеров в этой подсети, ему требуется возможность маскировать пакеты из L в качестве внутреннего IP-адреса D, для того, чтобы правильно маршрутизировать пакеты через G.
Это также относится к использованию компьютера в качестве сервера VPN; Чтобы выйти в остальную часть сети или, в частности, во внешнюю сеть, вам нужно маскироваться под IP-адрес этого сервера.
Это просто, как работает NAT. То же самое относится к прокси и т. Д.