Как сделать так, чтобы внешние запросы от сервера LAMP обходили интернет-цензуру?

544
adempewolff

У меня был еще один вопрос на сайте askUbuntu, и я перенес эту версию с вопроса о сбое сервера, так как я считаю, что Super User - это лучшее место, где можно его задать .

Фон:

У меня есть локальная (Drupal) среда разработки, состоящая из сервера LAMP, работающего на виртуализированной ОС Xubuntu 12.04 с хост-ОС Ubuntu 12.04. Мостовая сеть не включена.

Я хотел бы начать экспериментировать с аспектами интеграции Web 2.0 в Drupal (например, интеграция с Youtube и Facebook), но все эти сайты заблокированы массивным режимом фильтрации, который включает, по меньшей мере, блокировку IP-адресов, DNS-фильтрацию, URL-фильтрацию и пакет. фильтрация - и использует пакеты сброса соединения для обеспечения соблюдения этих правил. Похоже, что некоторые интернет-провайдеры также используют глубокую фильтрацию пакетов для обнаружения ssh-туннелей, которые затем ограничиваются пропускной способностью - к счастью, мой интернет-провайдер в моей квартире в настоящее время этого не делает. Иностранцам не запрещено использовать прокси / vpns / и т.д. до тех пор, пока они не используют их, чтобы нарушить закон (то есть делиться запрещенными материалами с гражданами Китая).

Для обычного просмотра веб-страниц и других задач, требующих доступа к заблокированному контенту, я использую туннель ssh к серверу (Ubuntu Server 10.04, с включенными только ssh и openvpn) в другой стране в качестве прокси-сервера socks5. Chromium и Firefox могут отправлять DNS-запросы через прокси-сервер socks5 (первый по умолчанию, а второй - путем изменения настроек конфигурации). Это решение отлично работает для всех подключений на стороне браузера к закрытым сайтам.

Тем не менее, многие из модулей Drupal для интробации web 2.0 также требуют, чтобы сам сервер запрашивал ограниченные внешние сайты.

Мой вопрос:

Каков наилучший способ прохождения через мой ssh-туннель и прохождения режима фильтрации:

  • Все внешние запросы и DNS-запросы с моего сервера Apache2,

или же

  • Только запросы (и DNS-запросы) с моего сервера Apache2 на указанные хосты?

Рассмотренные / Попытки Решений

  • Простейшим решением было бы использовать сервер LAMP на машине вне режима фильтрации (тот, к которому я обращаюсь). Однако я предпочел бы не делать этого по ряду причин (нет физического доступа к этой машине, если что-то пойдет не так, устаревшее оборудование, если я потеряю соединение с этим сервером, я не смогу продолжить разработку и т. Д.)
  • Использовать глобальные настройки прокси-сервера - Xubuntu не имеет возможности для глобальных настроек socks5, согласно моим исследованиям. Также я не знаю, поймет ли это мои DNS-запросы.

  • использовать tsocks: это, кажется, лучший кандидат, но у меня есть две проблемы / вопросы:

    1. Где находится скрипт, который запускает / перезапускает Apache2, чтобы я мог предвосхитить эти команды tsocks?

    2. Как мне перехватить и перенаправить DNS-запросы через прокси socks5?

      Редактирование /etc/hosts/файла предоставляет ограниченный обходной путь, но такие сайты, как youtube.com, загружают мультимедиа и другой контент с такого количества внешних сайтов (и, следовательно, URL-адресов), что практически невозможно отслеживать все эти (возможно, сброс соединения) сторонние URL-адреса. Использование socatдля захвата, преобразования и отправки трафика UDP через прокси-сервер socks5 (как описано здесь ) кажется хорошим решением, но я не смог реализовать его, как описано в связанном руководстве. (Если socatподтверждено, что использование является правильным способом решения моей проблемы, я могу опубликовать команды, которые я использую для проверки)

4
Вы хотите VPN, которая может направить весь трафик через него на сетевой уровень. Darth Android 11 лет назад 1
@DarthAndroid Да, VPN был бы идеальным. К сожалению, мне так и не удалось правильно настроить openVPN на моем сервере - на самом деле я подозреваю, что это проблема маршрутизатора в этой сети. Поэтому я вместо этого начал использовать SSH, который я сейчас предпочитаю, потому что он позволяет мне выбирать, какой трафик проходить через туннель, а какой - нет. adempewolff 11 лет назад 0
Если они успешно пытаются предотвратить прямые соединения OpenVPN, но SSH не затронут, вы можете туннелировать OpenVPN через SSH. Проблема с маршрутизатором, за исключением цензуры, маловероятна, поскольку OpenVPN использует обычные пакеты TCP или UDP. Gurken Papst 11 лет назад 1

1 ответ на вопрос

1
Michael Hampton

Apache на самом деле не устанавливает исходящие соединения; PHP есть. Так что PHP должен общаться с прокси SOCKS.

Соответствующий: https://stackoverflow.com/questions/10490962/establishing-socket-connection-in-php-using-socks-proxy

Было бы проще, если бы у вас был HTTP-прокси, и проще всего с VPN. Возможно, вам стоит еще раз настроить OpenVPN?

Кроме того, вы можете настроить Privoxy на своем сервере для взаимодействия с прокси-сервером SOCKS, а затем настроить PHP для использования Privoxy в качестве HTTP-прокси.

Отличный ответ, у меня еще не было времени проверить его, но я все равно пометил его как принятый, потому что подозреваю, что по крайней мере одно из возможных решений, которые вы упомянули, удовлетворит мои потребности. Спасибо! adempewolff 11 лет назад 0

Похожие вопросы