Назад | Перейти на главную страницу

squid укажите исходящий сетевой интерфейс

У меня есть машина Linux Debian с множеством сетевых интерфейсов (от venet0: 1 до venet0: 5), на которой работает Squid. Если я подключаюсь к интерфейсу venet0: 2, squid использует venet0: 0 для исходящего трафика, но я хочу, чтобы Squid использовал тот же сетевой интерфейс для подключений. Поэтому, если я подключаюсь к IP-адресу для venet0: 1, прокси также должен использовать тот же самый интерфейс для исходящего трафика.

В настоящее время я использую следующую конфигурацию:

http_port 200
forwarded_for off
uri_whitespace encode
visible_hostname localhost
via off
collapsed_forwarding on
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/users
auth_param basic children 5
auth_param basic realm Proxy
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl ncsa_users proxy_auth REQUIRED
access_log none
cache_store_log none
cache_log /dev/null
acl all src all
http_access allow ncsa_users
header_access From deny all
header_access Referer deny all
header_access Server deny all
header_access User-Agent allow all
header_access WWW-Authenticate deny all
header_access Link deny all
header_access Accept-Charset deny all
header_access Accept-Encoding deny all
header_access Accept-Language deny all
header_access Content-Language deny all
header_access Mime-Version deny all

Я попробовал учебник из http://www.tastyplacement.com/squid-proxy-multiple-outgoing-ip-addresses но я не думаю, что смогу его использовать, потому что я аутентифицирую пользователей с помощью ncsa, а не с исходными IP-адресами.

Есть ли возможность, чтобы squid использовал правильный сетевой интерфейс? Было бы неплохо, если бы я мог избежать правил acl, потому что это потребовало бы изменений конфигурации при каждом изменении одного IP-адреса.

Лучшее возможное решение - создать ACL для каждого интерфейса, сделать все запросы, поступающие на этот интерфейс, принадлежащими этой группе, и перенаправить эту группу на определенный исходящий интерфейс.

Пример:
Сервер X имеет следующие IP-адреса:

  • 10.0.0.1
  • 10.0.0.2
  • 10.0.0.3

Следовательно, файл squid.conf должен выглядеть примерно так:

acl 10_0_0_1 localip 10.0.0.1
tcp_outgoing_address 10.0.0.1 10_0_0_1 

acl 10_0_0_2 localip 10.0.0.2
tcp_outgoing_address 10.0.0.2 10_0_0_2 

acl 10_0_0_3 localip 10.0.0.3
tcp_outgoing_address 10.0.0.3 10_0_0_3

Тогда любые запросы к «10.0.0.1» будут использовать интерфейс «10.0.0.1», любые запросы к «10.0.0.2» будут использовать интерфейс «10.0.0.2» и так далее.

Я знаю, что это старый вопрос, но, поскольку он по-прежнему является первым результатом поиска в Google, по-прежнему можно публиковать правильный ответ.

Он настроен в acl, поэтому после строки:

acl youracl src IP.Ad.Res.Of venet: 0: 2

добавьте следующее:

tcp_outgoing_address 192.168.1.1 youracl

Вам нужно что-то похожее на указанную вами ссылку, но другой подход. Предположим, что VEIP1 означает IP-адрес venet0: 1.

acl ncsa_users proxy_auth ТРЕБУЕТСЯ http_access deny! ncsa_users

acl ve1acl localip VEIP1 http_access разрешить ve1acl ncsa_users tcp_outgoing_address VEIP1 ve1acl

acl ve2acl localip VEIP2 http_access allow ve2acl ncsa_users tcp_outgoing_address VEIP2 ve2acl

(Думаю, вы сможете выяснить остальную часть схемы.)

Кроме того, я думаю, вам придется удалить строку http_access allow ncsa_users, которую вы указали выше, потому что теперь мы хотим, чтобы пользователь был аутентифицирован и был подключен к одному из этих конкретных IP-адресов.

P.S. Я никогда не настраивал squid, поэтому я не уверен, что это полный ответ. Но, читая документы, я могу уверенно сказать, что это правильное направление. Удачи, дай мне знать, как дела!