У меня есть машина с 3 интерфейсами, две публичные и одна локальная. Все они из одного и того же диапазона IP. Все внешние службы на машине используют внутренний IP-адрес.Назначение компьютера IP под linux
Однако, когда процесс открывает соединение с внешним миром, адрес источника в пакетах устанавливается равным общему интерфейсу открытого интерфейса, который будет использоваться для отправки пакетов.
Возможно ли под Linux заставить все исходные адреса быть адресами определенного интерфейса, даже если пакет будет маршрутизироваться через другой интерфейс?
Скажем, у нас есть машина с 3 интерфейсами, A.B.C.1, A.B.C.2, A.B.C.3. Из них A.B.C.1 и A.B.C.2 подключены к Интернету (и A.B.C.0/24 направляется к ним). Все сервисы на компьютере прослушивают A.B.C.3. Можно ли гарантировать, что все пакеты, происходящие на машине, будут иметь адрес источника A.B.C.3, даже если они покинут машину через A.B.C.1 или A.B.C.2?
Задание адреса источника при открытии гнезда для исходящего соединения не является решением; мы говорим о существующих программах, которые нельзя изменить. Кроме того, он должен работать и для ICMP.
Спасибо.
Спасибо, я буду копаться в этом. Однако на A.B.C.3 есть другие, физически разные машины, использующие другие адреса из диапазона A.B.C. *. Я не хочу, чтобы их исходящие пакеты были переведены. То есть, если машина в A.B.C.9 использует маршрут по умолчанию A.B.C.3, я хочу, чтобы его пакеты оставались как A.B.C.9, только машина с тремя интерфейсами должна быть вынуждена использовать A.B.C.3 для всех исходящих пакетов. Наверное, мне нужно будет входить в iptables (который активен, как брандмауэр) и таблицу NAT (которую я никогда не использовал). – Zoltan
Затем используйте вместо этого цепочку «OUTPUT». См. Мой обновленный ответ. – Yoel