У меня есть машина 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-адреса:
Следовательно, файл 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, поэтому я не уверен, что это полный ответ. Но, читая документы, я могу уверенно сказать, что это правильное направление. Удачи, дай мне знать, как дела!