У меня есть VPS с несколькими выделенными IP-адресами (мы можем использовать debian, centos или ubuntu). Я могу использовать ssh-туннель через сервер, используя любой из IP-адресов. Однако любой настроенный мной ssh-туннель всегда показывает только один IP-адрес конечного конечного сайта.
me --ssh to IP1 -> | server | ----> http: // whatismyip.com (отображает IP1)
me --ssh to IP2 -> | server | ----> http: // whatismyip.com (отображает IP1)
me --ssh на IP3 -> | server | ----> http: // whatismyip.com (отображает IP1)
Как настроить сервер так, чтобы при ssh-туннеле на IP1 его исходящий IP-адрес был IP1. И когда я использую ssh-туннель в IP2, его исходящий IP-адрес будет IP2?
Что я хочу: меня --ssh на IP1 -> | server | ----> http: // whatismyip.com (отображает IP1)
me --ssh to IP2 -> | server | ----> http: // whatismyip.com (отображает IP2)
IP-адреса находятся в разных подсетях (на самом деле полностью различаются Class As).
IP-адрес, который вы используете для подключения к серверу SSH, на самом деле не имеет ничего общего с тем, какой IP-адрес используется SSH, когда он инициирует исходящие соединения от вашего имени.
Адрес источника пакетов, передаваемых через туннель, будет намного больше зависеть от таблиц маршрутизации и шлюза по умолчанию для SSH-сервера.
Если все ваши адреса находятся в одной подсети, я не верю, что есть какой-либо способ установить исходный адрес, используя только ssh.
В качестве альтернативы, я считаю, вы можете настроить несколько экземпляров OpenVPN, каждый со своим диапазоном tun и IP-адресов. Затем настройте разные правила NAT для пакетов, поступающих от каждого экземпляра VPN.
это грязное решение и может вызвать проблемы.
> iptables -t nat -A POSTROUTING -j SNAT --to IP2
>
> so
> IP1 ---> IP2
> IP2 ---> IP2
> IP3 ---> IP2
Если вам нужно изменить и у вас нет других правил iptables, просто перезапустите iptables, после чего все должно быть сброшено.
У меня такие же проблемы, как и у вас, и это лучшее, что я мог узнать.
Это не проблема туннелирования. Если вы находитесь на сервере и используете SSH (именно так вы создаете туннель, верно?), Вы увидите, что эти туннели настроены с использованием одного и того же IP-адреса.
Это проблема маршрутизации TCP. если ты бежишь netstat -rn
, вы увидите свою таблицу маршрутизации. Скорее всего, вы маршрутизируете все пакеты через один и тот же интерфейс - ваш маршрут по умолчанию. Вам нужны очень конкретные маршруты, которые имеют более высокий приоритет, чем ваш маршрут по умолчанию, чтобы иметь приоритет.
Извините, это не ответ - я надеялся вместо этого добавить комментарий к приведенному выше, но я новичок на этом сайте.
Я просто хотел добавить, что слышал, что можно установить, какой интерфейс используется для исходящего трафика для каждого пользователя оболочки (UID). Не совсем уверен, как, я пытаюсь понять это сам, потому что уже давно я хотел использовать 3 исходящих IP-адреса на моем VPS (без настройки специального прокси-программного обеспечения).
Вы можете добавить разных пользователей для каждого IP-адреса и сопоставить их с их идентификатором пользователя:
useradd IP1
iptables -t nat -m owner --uid-owner IP1 -A POSTROUTING -j SNAT --to IP1
Пользователь IP1 теперь всегда будет использовать IP1, даже через ssh.