Для упрощения доступа в интернет из локальной сети решил всё-таки взять и настроить прозрачный прокси, т.к. очень долго собирался это сделать и давно хотел сделать так, чтобы в локальной сети не заботиться о настройках параметров прокси-сервера. Linux Ubuntu Server уже был установлен и настроен в качестве LAMP (Linux Apache MySQL PHP), о чем я ранее писал в шпаргалке, а так же еще в нескольких статьях о Linux
Итак, исходные данные: ОС: Linux Ubuntu Server 10.04
eth0 - сетевая карта, подключенная к маршрутизатору (интернет)
iface eth0 inet static
address 192.168.3.102
netmask 255.255.255.0
network 192.168.3.0
broadcast 192.168.3.255
gateway 192.168.3.253
eth1 - сетевая карта, подключенна к локальной сети
iface eth1 inet static
address 192.168.5.104
netmask 255.255.255.0
network 192.168.5.0
broadcast 192.168.5.255
Здесь я не буду описывать настройки сети. Частично о командах, помогающих настроить сеть, можно почитать в статье Настройка Linux Ubuntu Server
И еще один момент. Все настройки я буду выполнять под учетной записью root, поэтому команду sudo не пишу.
Настройка DNS
Не буду описывать для чего нужен DNS и что это такое, об этом можно почитать много где. Ясно одно, без этих настроек интернет не работал. Указание DNS серверов в настройке сетевой карты не помогло. Итак, в файле /etc/resolv.conf пишем адреса наших DNS-серверов. Открываем на редактирование этот конфиг:
nano /etc/resolv.conf
И пишем в него данные нашего провайдера:
nameserver 81.26.129.5
nameserver 81.26.132.6
Перезапускаем сеть и пробуем ping с самого Linux сервера на какой-нибудь узел
/etc/init.d/networking restart
root@serv-web:/home/alex# ping ya.ru
PING ya.ru (87.250.251.3) 56(84) bytes of data.
64 bytes from www.yandex.ru (87.250.251.3): icmp_seq=1 ttl=57 time=86.6 ms
64 bytes from www.yandex.ru (87.250.251.3): icmp_seq=2 ttl=57 time=85.0 ms
64 bytes from www.yandex.ru (87.250.251.3): icmp_seq=3 ttl=57 time=86.8 ms
Отлично, сам сервер интернет видит.
Настройка NAT
Опять же. Что такое NAT и для чего он нужен можно почитать тут.
От себя скажу своими словами, что NAT позволяет сетевым программам в локальной сети работать как будто они работают в интернет напрямую, а не через какой-то маршрутизатор или другой компьютер. Например, почтовая программа забирает почту по протоколу POP используя порт 110. Если NAT не настроен, то почтовая программа не сможет даже соединиться с сервером почты, если NAT работает, то порт 110 просто “пробрасывается” от компьютера в локальной сети через шлюз (маршрутизатор, на котором работает NAT) к почтовому серверу.
Для настройки NAT использую iptables, поэтому надо будет предусмотреть настройки NAT из скрипта и организацию автозапуска этого скрипта после перезагрузки системы.
Создаю файл-скрипт:
touch /etc/nat
И в этот файл пишу вот такое содержимое:
#!/bin/sh
# Включаем форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward
# Разрешаем трафик на loopback-интерфейсе
iptables -A INPUT -i lo -j ACCEPT
# Разрешаем доступ из внутренней сети наружу
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
# Включаем NAT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.5.0/24 -j MASQUERADE
# Разрешаем ответы из внешней сети
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Запрещаем доступ снаружи во внутреннюю сеть
iptables -A FORWARD -i eth0 -o eth1 -j REJECT
После сохранения файла /etc/nat помещаю его в автоматическую загрузку. Для этого в конце файла /etc/network/interfaces дописываю строчку:
post-up /etc/nat
Для того, чтобы скрип запускался, надо дать ему права на запуск:
sudo chmod +x /etc/nat
Подробнее о правах доступа в Linux написано в этой статье
Теперь можно перезапустить сеть командой /etc/init.d/networking restart и на компьютере в локальной сети установить в настройке сети адрес шлюза по умолчанию равным адресу нашего Linux сервера. У меня это адрес 192.168.5.104 Но интернет еще не работает, т.к. остался не настроен DNS. То есть с компьютера локальной сети уже можно пинговать и заходить на сайты по IP адресу, а не по имени.
Настройка кэширующего DNS
Устанавливаем кэширующий DNS сервер Dnsmasq:
apt-get install dnsmasq
После установки открываем конфиг /etc/dnsmasq.conf на редактирование, ищем и раскомментируем параметр listen-address. В моем случае он выглядит так:
listen-address=127.0.0.1, 192.168.5.104
Как он выглядел до редактирования я уже не помню, но обязательно нужно указать адрес интерфейса локальной сети (у меня 192.168.5.104). Перезапускаем Dnsmasq:
/etc/init.d/dnsmasq restart
После этого на компьютерах в локальной сети работает интернет без указания прокси.
На этом пока всё. В следующей статье опишу как я “завернул” интернет на прокси Squid