3

Я хочу настроить свою систему OSX так, чтобы весь сетевой трафик проходил через туннель SSH.

Я написал небольшой сценарий для этой цели, и это команды, которые он выполняет:

// setup tunnel
ssh -fN -D 1080 -p 22 user@remote

// start up redsocks
sudo redsocks -c /tmp/redsocks.conf -p /tmp/redsocks.pid

// forward all tcp traffic to tunnel
sudo ipfw add 0010 fwd 127.0.0.1,12345 tcp from me to any not dst-port 12345 not dst-port 1080 not dst-ip REMOTE_IP

Я использую redsocks для создания http-прокси для моего ssh-туннеля (чтобы я мог перенаправить весь tcp-трафик на него через ipfw), redsocks.conf выглядит так:

base {
    log_debug = on;
    log_info = on;
    log = "file:/tmp/redsocks.log";
    redirector = generic;
}
redsocks {
    local_ip = 127.0.0.1;
    local_port = 55660;
    ip = 127.0.0.1;
    port = 1080;
    type = socks4;
}

Кажется, что пока все работает, весь трафик TCP в моей системе OSX проходит через туннель ssh, но проблема в трафике UDP, и из-за этого не работают DNS-запросы.

Как я могу получить DNS на своем локальном компьютере для работы через туннель SSH?

3 ответа3

2

Использовать вместо sshuttle ? sshuttle утверждает, что правильно обрабатывает DNS и TCP, без такого количества возни - только опция --dns .

НОСКИ IME казались немного старыми и нелюбимыми. И я не очень понимаю это использование ipfw и redsocks.

Однако я хотел бы отметить, что SOCKS4 не поддерживает туннелирование DNS, поэтому я не удивлен, что у вас проблемы. Последующие версии SOCKS действительно поддерживают это, так что вы можете посмотреть на это. И, видимо, SSH может поддерживать SOCKS5.

1

Ваша линия ipfw … только перенаправляет трафик TCP. Может быть, добавить следующую строку?

sudo ipfw add 0011 fwd 127.0.0.1,12345 \
                   udp from me \
                   to any not dst-port 12345 \
                          not dst-port 1080 \
                          not dst-ip REMOTE_IP

Также неплохо добавить set -x (для отладки) и set -e (немедленно потерпеть неудачу, если какая-либо из команд не сработает).

  • Один , как правило , должны использовать термин «SSH туннелирования» для обозначения tun с SSH.
  • Переадресация портов - это особая форма туннелирования, но в этом контексте ее все равно следует называть «переадресацией портов».
  • Не используйте SSH-туннелирование (как в -oTunnel и -oTunnelDevice), за исключением быстрых специальных заданий.
  • DNS может использовать TCP в качестве транспорта. Он не ограничен UDP, хотя это предпочтительный транспорт.
1

Помимо того, что вы уже используете, sSH позволяет туннелировать весь IP-трафик, независимо от используемого протокола уровня 4. Ваш удаленный сервер должен иметь PermitTunnel yes и клиент должен запросить туннель, используя директиву Tunnel . Затем вы можете использовать эту новую ссылку в качестве шлюза по умолчанию. Смотрите подробную инструкцию для туннеля здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .