Я использую анонимный VPN, но мне нужен SSH-доступ к внутреннему компьютеру.
Как мне получить доступ к своему внутреннему компьютеру через SSH? Когда я делаю SSH 98.123.45.6, время ожидания соединения истекло.
При поиске я нашел рекомендации либо настроить правила iptables, правила маршрутизации, либо добавить ListenAddress в sshd_config. Что из этого относится к моему случаю?
Вот мой маршрут:
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.115.81.1 10.115.81.9 255.255.255.255 UGH 0 0 0 tun0 10.115.81.9 * 255.255.255.255 UH 0 0 0 tun0 50.1.2.3-sta ddwrt 255.255.255.255 UGH 0 0 0 eth0 192.168.1.0 * 255.255.255.0 U 202 0 0 eth0 169.254.0.0 * 255.255.0.0 U 204 0 0 vboxnet0 loopback * 255.0.0.0 U 0 0 0 lo default 10.115.81.9 128.0.0.0 UG 0 0 0 tun0 128.0.0.0 10.115.81.9 128.0.0.0 UG 0 0 0 tun0 default ddwrt 0.0.0.0 UG 202 0 0 eth0
Чтобы решить эту проблему, вам необходимо настроить обе iptables и правила маршрутизации. Конкретная проблема, с которой вы сталкиваетесь, заключается в том, что исходящие пакеты SSH маршрутизируются через ваш анонимный интерфейс туннеля VPN, а не через интерфейс Ethernet. Это происходит потому, что ваше программное обеспечение VPN настроило правило маршрутизации для отправки любого необработанного трафика через туннельный интерфейс. Подходит для анонимизации вашего сетевого трафика; плохо для установления SSH-соединений с вашим компьютером.
Есть несколько способов решить эту проблему, но я поделюсь с вами тем, который работал у меня в идентичной ситуации. Вот что нам нужно сделать:
Примечание: я работал с Raspbian, пока делал следующее, поэтому вы мощь необходимо немного настроить команды, чтобы они соответствовали вашему дистрибутиву.
Начните с просмотра файла определения таблицы iproute2. Мы хотим убедиться, что не используем имя или номер каких-либо существующих таблиц правил.
cat /etc/iproute2/rt_tables
Скорее всего, вы увидите что-то подобное:
# reserved values
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
Выберите произвольный номер и имя для вашей новой таблицы правил - ничего, что не использовалось выше. Я буду использовать номер 201 и имя novpn
для оставшейся части этого ответа.
Добавьте определение непосредственно в файл определения или отредактируйте его в текстовом редакторе по вашему выбору:
echo "201 novpn" >> /etc/iproute2/rt_tables
Проверьте все существующие правила IP, которые имеют дело с масками netfilter:
ip rule show | grep fwmark
Если grep ничего не выдает, все в порядке. Если он печатает несколько строк, обратите внимание на шестнадцатеричное число справа от слова fwmark
в каждой строке. Вам нужно будет выбрать номер, который в настоящее время не используется. Поскольку у меня не было существующих правил fwmark, я выбрал число 65.
ip rule add fwmark 65 table novpn
Это приводит к тому, что любые пакеты с маской netfilter 65 ищут наш новый novpn
таблица с инструкциями по маршрутизации пакетов.
ip route add default via YOUR.GATEWAY.IP.HERE dev eth0 table novpn
Здесь важно отметить dev eth0
. Это заставляет весь трафик, проходящий через novpn
таблица, чтобы использовать только аппаратный интерфейс Ethernet, а не интерфейс виртуального туннеля, создаваемый вашей VPN.
Сейчас самое время очистить кеш iproute, чтобы новые правила и маршруты вступили в силу немедленно:
ip route flush cache
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 65
Здесь слишком много вариантов, чтобы я мог подробно их объяснить. Я настоятельно рекомендую вам прочитать страницу руководства для iptables, чтобы понять, что здесь происходит:
man iptables
Вкратце: мы добавляем правило вывода в таблицу mangle брандмауэра (для специализированной обработки пакетов), которая инструктирует его отмечать любые TCP-пакеты, исходящие из порта источника 22, с помощью нашей назначенной маски netfilter 65.
На этом этапе вы должны быть готовы протестировать SSH. Если все пойдет хорошо, вы должны увидеть счастливое приглашение «Войти как».
В целях безопасности я рекомендую вам указать вашему брандмауэру отбрасывать любые входящие SSH-запросы из туннельного интерфейса:
iptables -A INPUT -i tun0 -p tcp -m tcp --dport 22 -j DROP
Обратите внимание, что все приведенные выше инструкции являются временными (за исключением создания идентификатора таблицы правил) - они будут очищены при следующей перезагрузке компьютера. Я оставляю вам задачу сделать их постоянными.