Я не знаю, является ли это ошибкой или преднамеренным резервным поведением, но из того, что я вижу здесь, это не имеет ничего общего с wlan0 локальный маршрут, который вы упомянули, или все шлюзы по умолчанию (без обид, но для меня это почти не имеет смысла), указанные в другом / «правильном» ответе.
Обычно как МАСКАРАД работает, он выбирает адрес, который настроен на исходящий интерфейс (который определяется маршрутизацией, следовательно, РАЗМЕЩЕНИЕ) для исходного NAT, который он выполняет. (Если на интерфейсе назначено несколько адресов, он, вероятно, выберет первый или тот, который установлен в качестве предпочтительного исходного адреса в соответствующем маршруте; я не очень знаком с этим, и это выходит за рамки здесь тем не мение). Это не имеет ничего общего с адресом nexthop/gateway маршрута по умолчанию. (В любом случае это не то, как работает исходный NAT.)
Однако, когда дело доходит до интерфейса вот, все становится немного сложнее. Точнее, это, похоже, не связано с самим интерфейсом (кроме того, что это будет исходящий интерфейс, потому что адрес назначения является локальным адресом), а скорее с тем, что адреса в 127.0.0.0/8 блок не в тему Глобальный. Хотя я понятия не имею, что происходит за кулисами, кажется, что трафик не может «появиться», если у хоста нет области видимости. Глобальный IP-адрес настроен, но попытка МАСКАРАД.
Что я вижу здесь, так это то, что даже если вы просто настроите адрес, который действителен для области Глобальный (например. 192.168.0.10/32) на любом интерфейсе (включая вот), вы увидите, что он снова работает. (Упомянутый вами локальный маршрут будет добавлен автоматически.Но я не вижу, чтобы здесь работало добавление только маршрута.)
Что бы это ни стоило, адреса и интерфейсы не сильно связаны друг с другом в Linux (не прямолинейным образом, например, он будет отвечать на трафик, только если их адрес назначения совпадает с настроенным адресом на входящем интерфейсе, даже когда IP-переадресация включена). не вызывает беспокойства). Так что это может иметь какое-то отношение к этому: в случае МАСКАРАД не могу выбрать область Глобальный адрес из того, что настроено на исходящем интерфейсе, он просто выбирает один из любого (хотя я сомневаюсь, что приоритет имеет какое-то отношение к маршруту по умолчанию), если все еще нет, он просто отказывается работать каким-то образом.
Если вам действительно нужно правило, позволяющее МАСКАРАД на всех интерфейсах, кроме вот, вы можете иметь:
iptables -t nat -A ОТПРАВКА ! -o lo -j МАСКАРАД