
Чтобы изменить разрешенный адрес хоста, мы можем изменить /etc/hosts.
Я хочу иметь эту функциональность при запуске одного скрипта без фактического изменения /etc/hosts.
Что-то
$HOST=foo.bar:10.0.1.256 ping foo.bar
будет то же самое, что иметь запись в /etc/hosts
10.0.1.256 foo.bar
и$ ping foo.bar
Это осуществимо?
решение1
ДубликатМогу ли я создать пользовательский файл hosts в дополнение к /etc/hosts?, где объясняется использование HOSTALIASES.
По сути, вы устанавливаете переменную среды HOSTALIASES, которая указывает на ваш собственный файл hosts.
Более подробная информация наhostname(7) страница руководства
решение2
Файлов хоста пользователя нет, сложная настройка привязки будет работать, размещая приложение за другим внутренним IP-адресом... однако... приложение должно иметь возможность пропускать DNS...
Если вы хотите сделать это для приложения, которое делает вызовы http/https, вы можете полностью пропустить DNS. При выполнении http-запроса домен копируется в заголовки, вы можете пропустить этот шаг, переопределив заголовок...
например;
wget --header="Хост: www.example.com" "http://127.0.0.1/bob/is/cool"
Это отправит http-запрос на localhost, однако http-запрос будет для www.example.com, а не для 127.0.0.1...
(обошел DNS и сделал корректный http-вызов для правильного домена).
Если по какой-то причине это альтернативная служба TCP, у которой нет идентификатора, например, хоста в запросе, то сработает безумная настройка привязки (запретите исходный IP-адрес приложения, оно будет разрешено на другой службе DNS).
Другим решением было бы использование брандмауэра ядра...
Разделите приложение на другую локальную сеть или, может быть, адрес обратной связи, тогда вы сможете выполнить DNAT на другой IP-адрес на основе адреса исходного пакета...