Маршрутизатор на ОС Centos 7
Предлагаю вариант настройки маршрутизатора с прокси на базе Centos7
Настройка сетевых интерфейсов
Рассматриваемый маршрутизатор имеет две сетевые карты:
- Сетевой интерфейс enp0s3 подключенный к провайдеры, ip адрес получает по протоколу dhcp
- Сетевой интерфейс enp0s8 подключенный к локальной сети, назначаем статический ip 192.168.10.1
Конфигурационные файлы сетевых интерфейсов находятся к каталоге /etc/sysconfig/network-scripts, для каждого используемого интерфейса необходимо создать файл конфигурации:
- ifcfg-enp0s3
- ifcfg-enp0s8
Содержимое ifcfg-enp0s3:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="dhcp" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="enp0s3" DEVICE="enp0s3" ONBOOT="yes" zone=public |
Содержимое ifcfg-enp0s8:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="none" DEFROUTE="no" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="enp0s8" DEVICE="enp0s8" ONBOOT="yes" IPADDR=192.168.10.1 PREFIX=24 ZONE=home |
Для применения настроек выполним команду:
1 | systemctl restart network |
Настройка раздачи ip адресов через dhcp
Нам необходимо установить dhcp сервер, в качестве которого буду использовать dnsmasq:
1 | yum install dnsmasq -y |
Конфигурационный файл dnsmasq находится в /etc/dnsmasq.d/, создадим файл router.conf для dhcp-сервера:
1 2 3 | interface=enp0s8 domain=home.local dhcp-range=192.168.10.50,192.168.10.150,255.255.255.0,12h |
Перезапустим сервис dnsmasq и установим в автозагрузку:
1 2 | systemctl restart dnsmasq systemctl enable dnsmasq |
Настройка firewalld
Добавить порты dhcp и dns сервера в фаервол а также включить маскарад на зоне public
1 2 3 | firewall-cmd --zone=home --add-service=dhcp --add-service=dns --permanent firewall-cmd --zone=public --add-masquerade --permanent firewall-cmd --reload |
После чего можно проверить что получилось — все ПК находящиеся в одной локальной сети должны получить ip адрес и иметь выход в сеть интернет.
Установка прокси squid
Установим прокси squid и выполним его настройку
1 | yum install squid -y |
По умолчанию он разрешает доступ из сетей:
1 2 3 | acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/16 # RFC1918 possible internal network |
Наша сеть входит в диапазон, поэтому можно настройки не менять, запускаем сервис и ставим в автозагрузку:
1 2 | systemctl start squid systemctl enable squid |
Разрешим подключение к порту прокси сервера в фаервол
1 2 | firewall-cmd --zone=home --add-service=squid --permanent firewall-cmd ---reload |
Настроем прокси в браузере клиента и проверим доступ в интернет
При выходе клинета в интернет в логах прокси сервера появятся записи подключений:
1 | cat /var/log/squid/access.log |
Запретим прохождение трафика в обход прокси сервера:
1 2 | firewall-cmd --zone=home --set-target=DROP --permanent firewall-cmd --reload |
Автоматическая настройка прокси в браузерах через WPAD
Для автоматической настройки через WPAD установим веб сервер nginx:
Так как nginx находится в репозитории EPEL, то сначала установим его
1 | yum install epel-release -y |
Затем можно установить nginx
1 | yum install nginx -y |
Конфигурационный файл для /etc/nginx/conf.d/wpad.conf
1 2 3 4 5 6 7 8 9 | server { listen 80; server_name wpad wpad.home.local; location / { root /usr/share/nginx/html/wpad/; allow 192.168.10.0/24; deny all; } } |
Создадим каталог
1 | mkdir -p /usr/share/nginx/html/wpad/ |
и выполним проверку конфигурационного файла:
1 | ngint -t |
Если ошибок нет, то будет следующий вывод:
1 2 | nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful |
Затем запускаем сервис и ставим в автозагрузку:
1 2 | systemctl start nginx systemctl enable nginx |
Добавим правило в фаервол дял досупа по http к nginx:
1 | firewall-cmd --add-service=http --zone=home |
Создадим файл с правилами /usr/share/nginx/html/wpad/wpad.dat
1 2 3 4 5 6 7 8 9 10 11 | function FindProxyForURL(url, host) { if (shExpMatch( host, "192.168.0.*" ) || shExpMatch( host, "127.*" ) || shExpMatch( host, "localhost" ) || shExpMatch( host, "*.my" ) || isPlainHostName( host ) || dnsDomainIs( host, ".home.local" )) { return "DIRECT"; } return "PROXY 192.168.10.1:3128; DIRECT"; } |
В завершении добавим запись wpad в /etc/dnsmasq.d/router.conf
1 2 | address=/wpad/192.168.10.1 address=/wpad.home.local/192.168.10.1 |
и перезапустим dnsmasq
1 | systemctl restart dnsmasq |
Включим автоматические определение прокси в браузере:
Исправление ошибок
Иногда бывает так что nginx не перезапускается, я выяснил что при выполнении команды systemctl stop nginx не выключается главнй процесс, это исправляется комментированеи строки
1 | #KillMode=process |
в unit-файле /usr/lib/systemd/system/nginx.service
После иденения unit-файла необходимо перечитать конфигурацию:
1 | systemctl daemon-reload |