Свяжите исходящий трафик сервера SOCKS с определенным IP

Можно сделать это путем создания двух псевдонимов для учетной записи, следующим образом:

Скажем, у Вас есть два адреса электронной почты: mom@example.com и kid@example.com, и Вы хотите, чтобы мама получила копию всей электронной почты ребенка. В этом случае mom@example.com и kid@example.com оба были бы учетными записями, но Вы также создадите следующие псевдонимы:

From:                         To:
kid@example.com               mom@example.com
kid@example.com               kid@example.com

Postfix поймет это - ребенка->, псевдоним ребенка не создает цикл (хотя похоже, что он должен!), вместо этого это говорит Postfix продвигаться к поставке почтовому ящику даже при том, что почта была уже поставлена псевдониму.

6
задан 2 April 2014 в 20:39
1 ответ

Протокол SSH не позволяет клиентам указать серверу привязаться к определенному адресу при динамической переадресации портов, поэтому нет, вы не можете указать своему SSH-клиенту сделать это. Вы также не можете сказать серверу OpenSSH сделать это. Он будет слепо использовать getaddrinfo для подключения к вашему удаленному хосту.

Единственный способ исправить это - настроить ваш сервер так, чтобы он делал то, что вы хотите. К сожалению, по маршрутизации или iptables невозможно определить, какое соединение было выполнено сервером OpenSSH. Проблема сложная: OpenSSH может открывать соединение, но может также порождать оболочку, которая может порождать другой процесс, который также может открывать соединения. Отличить эти два случая сложно. Было бы намного проще, если бы OpenSSH просто установил отметку или что-то в этом роде, но это не так.

Итак, ваши решения ограничены:

  • Используйте отдельный сервер SOCKS, который позволяет вам настроить адрес привязки.

  • Настройте ядро ​​так, чтобы оно по умолчанию использовало xx.yy.zz.2 для всех исходящих соединений, или для фактических IP-адресов назначения, которые используются, если они известны заранее.

    Чтобы назначить исходный адрес, когда его нет, ядро ​​просматривает используемую запись маршрута для вашего адреса назначения и имеет ли он предпочтительный исходный адрес , он будет его использовать. В противном случае он выберет адрес, который лучше всего подходит для задачи. Все, что он выберет, можно проверить командой ip route get (destination) после токена src :

    $ ip route get 8.8.8.8 2 по умолчанию для всех исходящих соединений или для фактических IP-адресов назначения, которые используются, если они известны заранее.

    Чтобы назначить исходный адрес, когда его нет, ядро ​​просматривает используемую запись маршрута для вашего адреса назначения, и если у него есть предпочтительный исходный адрес, он будет его использовать. В противном случае он выберет адрес, который лучше всего подходит для задачи. Все, что он выберет, можно проверить командой ip route get (destination) после токена src :

    $ ip route get 8.8.8.8 2 по умолчанию для всех исходящих соединений или для фактических IP-адресов назначения, которые используются, если они известны заранее.

    Чтобы назначить исходный адрес, когда его нет, ядро ​​просматривает используемую запись маршрута для вашего адреса назначения, и если у него есть предпочтительный исходный адрес, он будет его использовать. В противном случае он выберет адрес, который лучше всего подходит для задачи. Все, что он выберет, можно проверить командой ip route get (destination) после токена src :

    $ ip route get 8.8.8.8 8.8.8.8 через (возможно, ваш шлюз) dev eth0 src xx.yy.zz.1 [...]

    Вы можете изменить свою таблицу маршрутизации с помощью команды ip route , чтобы добавить предпочтительные исходные адреса с помощью ip route change [...] src xx.yy.zz.2 Вы даже можете добавить более конкретный маршрут, проходящий через тот же шлюз, но с другим предпочтительным исходным адресом.

  • Поместите OpenSSH в пространство имен сети, которое обрабатывает только адрес xx.yy.zz.2. Это решение является излишним и может изменить конфигурацию многих служб на вашем сервере, поскольку оно по существу изолирует ваши два адреса. Это решение повлечет за собой множество изменений в вашей системе, особенно в отношении способа запуска демона sshd и вашего socks-сервера.


Не связано со всем этим: "псевдонимы интерфейсов" (например, eth0: 1 ) являются устарело в Linux. Они по-прежнему работают как обратная совместимость с историческими инструментами, такими как ifconfig , но вы действительно должны избавиться от них и использовать встроенные функции ядра для получения нескольких адресов для каждого интерфейса. Прекратите использовать ifconfig , route и используйте вместо него ip addr и ip route .

Используйте ip addr add .. . dev eth0 , чтобы добавить адрес к интерфейсу eth0 . Вы можете добавить столько адресов, сколько захотите. Используйте ip addr , чтобы перечислить их все. См. Справочную страницу ip addr и ip route для получения дополнительной информации.

route и используйте вместо него ip addr и ip route .

Используйте ip addr add ... dev eth0 , чтобы добавить адрес к интерфейсу eth0 . Вы можете добавить столько адресов, сколько захотите. Используйте ip addr , чтобы перечислить их все. См. Справочную страницу ip addr и ip route для получения дополнительной информации.

route и используйте вместо него ip addr и ip route .

Используйте ip addr add ... dev eth0 , чтобы добавить адрес к интерфейсу eth0 . Вы можете добавить столько адресов, сколько захотите. Используйте ip addr , чтобы перечислить их все. См. Справочную страницу ip addr и ip route для получения дополнительной информации.

4
ответ дан 3 December 2019 в 00:35

Теги

Похожие вопросы