Доброй ночи!
На сервере есть несколько сетевых интерфейсов, и только первый из них является шлюзом по умолчанию.
Если я создаю сокет и делаю ему bind с IP адресом определенного интерфейса - могу слушать на нем и UDP пакет ответа уходит именно с указанного интерфейса. Как задумано.
Кроме того, я хочу чтобы один php скрипт осуществлял подключения также с выбранного интерфейса, не являющегося шлюзом по умолчанию.
Для этого вызываю stream_context_create() со значением socket-bindto равным ‘1.2.3.4:0’ (тут адрес выбранного интерфейса) и далее file_get_contents(), но получаю ошибку таймаута на любом интерфейсе кроме первого. Очевидно какие-то проблемы с маршрутизацией SYN / ACK пакетов. Дампы не писал.
После
iptables -t nat -A POSTROUTING -j MASQUERADE`
у меня тот же код подключается нормально, но на запрашиваемом узле отображается IP адрес шлюза по умолчанию.
Как решить эту проблему чтобы и TCP и UDP шло с выбранного интерфейса, не являющегося шлюзом по умолчанию?
Как альтернативу, дайте пожалуйста команды для iptables которые будут маршрутизировать весь трафик на определенный IP адрес через выбранный интерфейс.