Создание интернет центра на базе Centos 7

Маршрутизатор на ОС Centos 7

Предлагаю вариант настройки маршрутизатора с прокси на базе Centos7

Настройка сетевых интерфейсов

Рассматриваемый маршрутизатор имеет две сетевые карты:

  1. Сетевой интерфейс enp0s3 подключенный к провайдеры, ip адрес получает по протоколу dhcp
  2. Сетевой интерфейс enp0s8 подключенный к локальной сети, назначаем статический ip 192.168.10.1

Конфигурационные файлы сетевых интерфейсов находятся к каталоге /etc/sysconfig/network-scripts, для каждого используемого интерфейса необходимо создать файл конфигурации:

  1. ifcfg-enp0s3
  2. 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

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.