Указание исходящего интерфейса для SSH-туннеля

Указание исходящего интерфейса для SSH-туннеля

У меня есть машина с двумя публичными IP-адресами на двух интерфейсах. На этой машине запущено sshd. Есть ли способ указать при создании туннеля с интерфейсом SOCKS (т.е. -D), какой интерфейс использовать для исходящих соединений?

решение1

Строго говоря, вы можете решить вашу проблему комбинацией опции -b в ssh, как предлагает mgjk, и маршрутизацией. Предположим, вы пытаетесь построить туннель к сайту 8.8.8.7 (просто фиктивный пример), и вы хотите, чтобы соединение проходило через eth1, тогда команда

 sudo route add -host 8.8.8.7 dev eth1

добавлю правильный маршрут, и все будет хорошо.

Однако это также идеальный случай применения «политической маршрутизации». Это подразумевает настройку таблицы маршрутизации на машине, настраивающей туннель (то естьтот, на котором командаssh -D ...выдается) просто потому, что это единственный, на котором существуют оба интерфейса.

Краткое, но достаточное объяснение дает Дэвид Шварц.на этом самом сайте. Единственная важная деталь: скажем, eth0 — это 192.168.1.2, а eth1 — это 10.0.0.2, тогда вы можете сказать

 ip rule add from 10.0.0.2 table <NAME1>
 ip rule add from 192.168.1.2 table <NAME2>

На этом этапе вы можете привязать свое ssh-соединение через -b к адресу eth1, и все готово.

решение2

Что происходит при использовании -b?

 -b bind_address
         Use bind_address on the local machine as the source address of
         the connection.  Only useful on systems with more than one
         address.

Связанный контент