У меня есть программное обеспечение Ruby, которое использует сеть во время своей работы.
Недавно я получил отзыв от пользователя, который работает за брандмауэром и использует SOCKS, это программное обеспечение для него не работает
Поэтому мне нужно смоделировать эту ситуацию, чтобы проверить, какая часть моего программного обеспечения не поддерживает HTTP_PROXY
переменные среды
Я попытался смоделировать этот межсетевой экран с помощью iptables
(внутри докера):
apt-get update -y
apt-get install iptables
export SOCKS5_PROXY_HOST=xxx.xxx.xxx.xxx[1]
export SOCKS5_PROXY_PORT=ppp
iptables -A INPUT -s $SOCKS5_PROXY_HOST -j ACCEPT
iptables -A OUTPUT -d $SOCKS5_PROXY_HOST -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
env HTTP_PROXY=$SOCKS5_PROXY_HOST:$SOCKS5_PROXY_PORT ruby my_script.rb
По какой-то причине этот подход не подходит не работает, и я получаю:
СОЕДИНЕНИЕ прокси прервано
или Не удалось подключиться к порту xxx.xxx.xxx.xxx pppp: Время ожидания соединения истекло
Примечания:
SOCKS
прокси iptable
правил, все они были доступны HTTP_PROXY
переменные среды https://ruby-doc.org/stdlib-2.6.3/libdoc/open-uri/rdoc/OpenURI.html , но, возможно, какой-то сторонний код нет. iptables
? iptables
? Большое спасибо @ michael-hampton за комментарии.
Краткие ответы на мои собственные вопросы:
ruby
HTTP_PROXY
принимает только прокси HTTP [S] (не обрабатывает Прокси-сервер SOCKS, как curl
) iptable
самый простой Подробнее о программировании:
git
gem, который не обрабатывает HTTP_PROXY
, и любой прокси-сервер должен быть настроен явно. Хорошее руководство, как это можно сделать socksify
может помочь легко добавить поддержку