Маршрутизация на основе порта.

Всем доброго.
Имеется сервер с двумя интерфейсами.
Один интерфейс (eth1) смотрит во внешнюю сеть через криптомаршрутизатор. И этот криптодевайс должен быть маршрутом по умолчанию.
А второй (etho) через ещё один шлюз должен смотреть во внутреннюю сеть.
И кроме маршрута во внутреннюю сеть надо настроить так, чтобы вся деятельность sshd велась через eth0.
Вроде, понимаю, что смотреть надо в сторону iptables, но вот реализовать не получается.
Либо в prerouting искать пакеты с портом источника 22, либо ловить пакеты от sshd, в любом случае, не получается реализовать.
Помогите, пожалуйста.
Забиндить sshd на ip адрес не то?
не, он примет пакет на нужном интерфейсе, а обратно его попытается услать через дефолтовый роут.
Суть в том, что вся деятельность должна осуществляться через криптошлюз, это будет "чёрный ящик". А изредка надо будет прокинуть на него ssh соединение, чтоб его удалённо немного поадминили. Криптошлюзом я рулить не могу, и говорят, через него провешивать ssh идеологически неверно.
Так что надо завернуть весь трафик от sshd через eth0.
Что-то я не понял, к чему в данном случае порт-роутинг.
У вас есть сервер, который видит две сети, доступный из обеих по любым портам – никаких дополнительных маршрутов и ухищрений для этого не требуется. Если вы хотите прикрыть какие-то порты для одной из сетей, вам достаточно простейшего фильтра, от бишь фаерволла, и не в PREROUTING, а в INPUT, как обычно.

Кроме того, непонятно, что за шлюз между сервером и локалкой, и на кой он нужен.
В общем, попробуйте описать вашу текущую ситуацию и ваши замыслы более детально.
не, он примет пакет на нужном интерфейсе, а обратно его попытается услать через дефолтовый роут
А теперь расскажите, ОТКУДА приходит запрос, раз ответ уходит в интернет? Значит, локалка ТОЖЕ выводит в интернет? Тогда рассказывайте с начала и в подробностях – что есть, чего хотите, откуда куда подключается SSH и т.д.
Итак. Два белых IP.
На одном висит роутер организации, на другом криптошлюз.
Роутер организации имеет два внутренних интерфейса - внутренняя сеть и DMZ.
У сервера два интерфейса - eth0 смотрит в сеть DMZ, eth1 - в криптошлюз.
Маршрут по умолчанию у него - криптошлюз.
А для работ по настройке/обновлению к нему надо периодически подключаться по ssh. Для этого я пробрасываю порт, ну, скажем по умолчанию 22 с первого белого IP на eth0.
Я попытался прописать второй маршрут по умолчанию с большей метрикой - не хочет. С той-же метрикой нестабильно работает и то и другое. Решил, что надо попробовать разрулить через iptables - ничего другого не придумывается
Роуты не могут нестабильно работать, и метрики тут ни при чём.

Судя по описанию, по SSH вы подключаетесь из интернета, а не из локалки, хотя упорно не говорите об этом.
В этом случае действительно нужен полиси-роутинг, только сразу предупреждаю – iptables не занимается роутингом.
Вам нужно создать как минимум одну дополнительную таблицу роутов со вторым дефолтным роутом через второй интерфейс, и правило (см. ip rule) на обработку соединений из этого интерфейса через эту вторую таблицу.
да, управлять будут из интернета.
И я даже нашёл словосочетание полиси-роутинг. Затрудняюсь найти подходяющую к теме хаутушечку. Потому как теорию раскуривать долго, а на практике желательно чтоб завтра вечером оно хоть как-то работало (пока тестовая эксплуатация).
И да я прямо не сказал, что пробросить надо из интернета. С локалкой там на route add -net локалка gw шлюз dev eth0 умишка хватило.
Большое спасибо, если знать что копать в сторону ip route/ip rule сообразить гораздо проще.
Подобное уже обсуждалось на нашем форуме раньше, вот например:
http://archlinux.org.ru/forum/topic/740/
Всем доброго.
Чего-то уткнулся в iptables.
Создал таблицу с маршрутом.
Создал правило с fwmark
пытаюсь добавить
iptables -t mangle -A output -p tcp --sport 22 -j MARK --set-mark 1
Не работает. Вычитал, что это будет работать с транзитными пакетами. А как маркировать сгенерированные локально? Какую-то мелочь, по ходу во всех доках пропускаю.
 
Зарегистрироваться или войдите чтобы оставить сообщение.