У меня есть система с двумя интерфейсами. Оба интерфейса подключены к Интернету. Один из них установлен как маршрут по умолчанию; побочным эффектом этого является то, что если пакет поступает на интерфейс не-default-route, ответ отправляется обратно через интерфейс маршрута по умолчанию. Есть ли способ использовать iptables (или что-то еще) для отслеживания соединения и отправки ответа обратно через интерфейс, из которого оно получено?
51
dev
параметр вip rule
команде, поэтому запустилip rule add from <interface_IP> table isp2
up ip rule add from <interface_IP> table isp2
иup ip route add default via <gateway_IP> dev ppp0 table isp2
к / etc / network / interfaces под соответствующим интерфейсом.dev <interface>
из,ip rule
чтобы заставить его работать на моей коробке. Если я правильно понимаю,dev <interface>
была фильтрация пакетов, которые были каким-то образом установлены на неправильном интерфейсе, который нужно было переместить в правильный интерфейс по переопределенному маршруту, но фильтрация правил по интерфейсу предотвращала это.dev <interface>
изip rule
команды, чтобы это работало. Пожалуйста, обновите ответ! За исключением этой детали, он работал как шарм. Большое спасибо, @Peter!Следующие команды создают альтернативную таблицу маршрутизации через
eth1
для пакетов, которые имеют метку 1 (кроме пакетов для localhost). Командаip
из пакета iproute2 (Ubuntu: iproute Установить iproute http://bit.ly/software-small , iproute-doc Установить iproute-doc http://bit.ly/software-small ).Другая половина задания распознает пакеты, которые должны получить оценку 1; затем используйте
iptables -t mangle -A OUTPUT … -j MARK --set-mark 1
эти пакеты для маршрутизации через таблицу маршрутизации 1. Я думаю, что следующее должно сделать это (замените 1.2.3.4 адресом интерфейса не-default-route):Я не уверен, что этого достаточно, возможно, для входящих пакетов требуется другое правило, чтобы модуль conntrack мог их отслеживать.
источник
У меня были проблемы с локально сгенерированными пакетами с помощью решения, предложенного Питером. Я обнаружил, что следующее исправляет это:
ПРИМЕЧАНИЕ. Вы можете столкнуться с проблемами синтаксиса в 4-й строке выше. В таких случаях синтаксис для 4-й команды может быть следующим:
источник
Я предполагаю, что вы используете Linux и, кроме того, что вы используете дистрибутив RedHat / CentOS. Другие Unix и дистрибутивы потребуют аналогичных шагов - но детали будут другими.
Начните с тестирования (обратите внимание, что это очень похоже на ответ @ Peter. Я предполагаю следующее:
Команды следующие:
Брандмауэр никак не задействован. Ответные пакеты всегда отправлялись с правильного IP-адреса, но ранее отправлялись через неправильный интерфейс. Теперь эти пакеты с правильного IP будут отправлены через правильный интерфейс.
Предполагая, что вышесказанное сработало, теперь вы можете сделать правило и изменения маршрута постоянными. Это зависит от того, какую версию Unix вы используете. Как и прежде, я предполагаю, что дистрибутив Linux основан на RH / CentOS.
Проверьте, что изменение сети является постоянным:
Если это не сработало, в более поздних версиях RH / CentOS вам также нужно выбрать один из двух вариантов:
Лично я предпочитаю устанавливать пакет правил, так как это более простой и поддерживаемый подход:
Еще одна сильная рекомендация - включить фильтрацию arp, поскольку это предотвращает другие связанные с двойной сетью проблемы. С помощью RH / CentOS добавьте следующее содержимое в файл /etc/sysctl.conf:
источник