У меня есть машина с двумя публичными 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.