LINUX.ORG.RU
ФорумAdmin

Перенаправление пакетов на интерфейс в iproute

 , , ,


0

1

Привет, народ. Я хочу запустить на компе почтовый сервер, мне надо чтобы трафик, исходящий из моего почтового сервера на порты 25, 465, 587, шел на интерфейс xray0. проблема в том, что, как я понял, я не могу просто сделать что-то типа

iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 2

, а потом

ip rule add fwmark 2 table 100
ip route add default dev xray0 table 100

, потому что у меня на этом же компе и запущен xray туннель, то есть если мне кто-то захочет передать письмо по 25 порту, откроется соединение от xray к почтовому серверу типа 127.0.0.1:7483->127.0.0.1:25, но этот пакет пометится маркой 2 и полетит опять в xray….. или нет? может, пакет сначала попадет под правила таблицы local?? можно сделать в xray такую штуку:

"sockopt": {
        "mark": 2
}

и потом типа

ip rule add dport 25 not fwmark 2 table 100

или если у нас стоит приоритет 0 для таблицы local, то есть, пакеты, которые пойдут на 127.0.0.1 по любому должны пройти через нее и попасть куда надо, то мне просто стоит добавить правило с номером приоритета больше, чем 0, то есть пакет попадет под мое правило ПОСЛЕ того как его проверит таблица локал. тогда мне просто нужно

iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK 2
ip rule add fwmark 2 priority 20 table 100
ip route add default dev xray0 table 100

и все будет работать??? или я не правильно понимаю? а вот еще вопрос, если пакет ушел через xray0, а вернулся через 127.0.0.1, то наверное, это тоже как-то неправильно, почтовик может не понять (да и ядро), что это именно ответ… тогда, возможно стоило бы ваще сделать tproxy на xray… но я пока не понял как.

мне надо чтобы трафик, исходящий из моего почтового сервера на порты 25, 465, 587, шел на интерфейс xray0

Добавь маршрут до сервера (IP адресе) по которому идёт подключение до xray0 и возможно для своего IP через шлюз, а потом замени маршрут по умолчанию на IP адрес шлюза за xray0.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Ну так я не знаю до какого идет. кто знает кому мне придет в голову написать сообщение, на Gmail или mail.ru или еще куда-то… или я не правильно понял? чето я уже думаю сделать бы как-то по-другому, пока не представляю какие методы туннелирования есть. показалось что интерфейс это самое простое, но вот хз. с прокси пока не понял как иметь дело.

pozzitifon4eG
() автор топика
Ответ на: комментарий от Khnazile

это в каком случае? если он идет из почтового сервера, то, как я понимаю, он идет сначала в OUTPUT, а потом в POSTROUTING, а потом в PREROUTING, А потом в INPUT. но пока все равно не совсем понятно, если пакет исходящий из моего почтовика, он направляется на ip адрес какой-то глобальный. то есть мне надо пометить его когда он в output находится по идее. ну а дальше то его уже xray пакует в тоннель. окей, ответ пришел от xray, попал в prerouting, в input…. и что мне это даёт… мне надо чтобы почтовый сервер думал что он установил исходящее соединение с сервером gmail например, но отправил он пакет на ip адрес gmail, а получил…. а поличил толи с 127.0.0.1, толи оттуда же, я пока не понял. но скорее со 172.0.0.1, потому что ответ то выходит из xray, который на 127.0.0.1 сидит по идее. мб использовать CONNMARK?? кстати я только что подумал, ведь если пакет ушел в xray0, то прийти ответ тоже оттуда же должен??? ну сто процентов так должно быть. тогда это просто. это же исходящее соединение, но в рамках соединения могут приходить и ответы. если пакет приходит отбратно из xray0 и там адрес источника указан тот же, на который мы отправляли, то есть и ядро и почтовик будут видеть что это покет из того же самого соединения, то тогда вообще большинство вопросов снимаются.

pozzitifon4eG
() автор топика
Ответ на: комментарий от pozzitifon4eG

Ты сейчас про какой из хостов? На том где у тебя почтовый сервер нет никакого forward. Пакет в сеть уходит через output, а из сети приходит через input

cobold ★★★★★
()
Последнее исправление: cobold (всего исправлений: 1)
Ответ на: комментарий от pozzitifon4eG

Нет, до принятия решения о маршрутизации локальный исходящий трафик вообще никуда не ходит, и даже не имеет исходящего IP адреса.
lo не обязательная сущность, для работы в Интернете она не нужна, и присутствует только для того, чтобы с программами, рассчитанными на работу в сети можно было работать на локалхосте без сети.

Khnazile ★★★★★
()
Последнее исправление: Khnazile (всего исправлений: 1)

короче, сделал я вот как:

iptables -t mangle -A OUTPUT -d 127.0.0.0/8 -j ACCEPT
iptables -t mangle -A OUTPUT -d 192.168.0.0/16 -j ACCEPT 
iptables -t mangle -A OUTPUT -p tcp -m multiport --dports 25,443,80 -j MARK --set-mark 2

ip route add default xray0 table 100
ip rule add fwmark 2 table 100

tcpdump показывает что пакеты идут. но curl -vL https://matrix.org выдаёт сначала connected to matrix.org, а потом SSL_ERROR_SYSCALL, но это уже совсем другая история.

pozzitifon4eG
() автор топика