Мне нужно построить мост между двумя сетевыми портами на сервере, чтобы все, что поступает на порт A, переходило в порт B, а все, что поступает на порт B, - на порт A.
У меня есть два устройства (dA и dB), которые находятся за разными NAT в разных сетях, оба могут устанавливать любое исходящее соединение, однако все входящие соединения заблокированы. Поэтому они не могут подключиться напрямую. На этих NAT невозможно настроить переадресацию портов.
Поэтому я поставлю сервер S, который может прослушивать все порты сети. Он принимает соединения на портах A и B и создает между ними мост, поэтому трафик проходит от A к B, как если бы они были подключены напрямую.
Окончательный результат, который я хочу заархивировать:
Есть ли способ сделать это с помощью сервера Linux? Сервер работает под управлением Linux на базе Debian wheezy.
Было бы здорово сделать это с помощью команд / инструментов командной строки, поэтому при необходимости порты можно изменить без редактирования какого-либо файла (с помощью скрипта).
Вы можете сделать это с помощью xinetd, используя его redirect
директива. Я лично предпочитаю использовать socat, потому что конфигурация xinetd находится в очевидном месте (что упрощает управление с помощью Puppet или Chef) и будет автоматически запускаться во время загрузки.
Инструмент сокат делает то, что мне нужно, простым способом.
socat TCP4-LISTEN:5060,reuseaddr TCP4-LISTEN:5061,reuseaddr
Он блокирует терминал, однако это лучшее решение, которое я смог найти.
Вы вроде как говорите про обратный прокси. Есть много полезных демонов (в частности, SOCKS-прокси), но вы ищете решение для командной строки.
Это может быть достигнуто с помощью переадресации портов ssh. Вы можете перенаправить порт с помощью:
user@dA:~$ ssh -R :1111:localhost:1111 user@server.com
Он откроет порт: 1111 на server.com. После принятия соединения на этом порте ssh перенаправит этот запрос на dA и установит соединение локально на dA с localhost:1111
пересылка всего трафика по существующему каналу ssh.
Итак, пока ваш сеанс ssh запущен и работает, каждый хост, подключающийся к server.com:1111, будет эффективно подключать dA: 1111
Обратите внимание на начальную точку с запятой. Это означает, что server.com должен принимать внешние подключения (по умолчанию он будет прослушивать только подключения от localhost).
Вам также нужно будет включить GatewayPorts
опция в конфигурации ssh на server.com. В противном случае sshd не позволит принимать внешние подключения.
Почему вы не используете iptables?
iptables -t nat -I PREROUTING --src $SRC_IP_MASK --dst $DST_IP -p tcp --dport $portNumber -j REDIRECT --to-ports $rediectPort