Я уже писал ранее, о проблемах с роутером, но увы более свежая версия прошивки особо ситуация не изменила. Имеется так-же назовем его, домашний сервер, под управлением Debian 7, всякое разное на нем, от мультимедиа, до этого сайта. Так же в нем имеется 2 сетевых карты, встроенная и внешняя. До этого момента использовал встроенную, подавал собственно на нее интернет с роутера на сервер.
И вот давно меня посещала мысль, пожалуй с самой покупки сервера, пустить интернет через него, даже внешнюю сетевую сразу покупал. Но на момент покупки железа для сервера с Debian 7 да и целом с линуксом был практически не знаком, да и основная цель покупки изучение операционной системы линукс на данный момент оправдана, не такой уж я специалист конечно еще, но значительный прогресс по сравнению с 2013 годом есть. Какие то базовые вещи нужные мне уже знаю помню, и проще познавать что-то новое.
В общем ладно, получилась такая большая предыстория, а теперь к делу.
Какая была поставлена задача, завести интернет во внешнюю сетевую карту eth1. Затем передать интернет встроенной eth0 и далее с нее на LAN роутера, а дальше в остальные LAN порты необходимые устройства + остается на раздача WI-FI.
Делать вход интернета eth0 или eth1 без разницы, все зависит от организации сети провайдером, я решил обезопасится, поскольку в сезон гроз довольно часто можно спалить сетевую. И в случае чего внешнюю можно заменить, а встроенная еще и материнку может спалить, увы, бывали случаи у знакомых.
В настройках сети /etc/network/interfaces
Сетевой карте eth1 прописываем параметры провайдера:
auto eth1 iface eth1 inet static address 172.19.1.147 netmask 255.255.252.0 gateway 172.19.0.1
Далее так-же статический адрес необходимо прописать и нашей встроенной сетевой eth0 которая будет раздавать интернет
auto eth0 iface eth0 inet static address 192.168.0.1 netmask 255.255.255.0
Обратите внимание, в eth0 параметр gateway (шлюз) не указывается, поскольку он может быть только один.
Далее на eth0 необходимо настроить DHCP сервер, я выбрал самый популярный isc-dhcp-server, как установить, инструкций море, конфигов тоже, но тем не менее я поделюсь тем что вышло у меня.
Для начала в файле /etc/default/isc-dhcp-server необходимо задать какая сетевая карта будет работать с DHCP-сервером.
Находим в выше указанном файле строку INTERFACES и в кавычках задаем сетевую карту, в моем случае будет так
INTERFACES="eth0"
В этом же файле можно посмотреть параметр DHCPD_CONF пусть к файлу (dhcp.conf) конфигурации.
Далее в файле /etc/dhcp/dhcpd.conf приступаем непосредственно к настройкам нашего dhcp, как править, решаете сами (править пример который есть, сохранить родное в бекап затем очистить и писать свое и т.д) я предпочел писать сам ну конечно не без помощи гугла. Вот что получилось:
ddns-update-style none; option domain-name-servers 192.168.0.1; authoritative; option ip-forwarding false; # No IP forwarding option mask-supplier false; # Don't respond to ICMP Mask req subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.32 192.168.0.255; option subnet-mask 255.255.255.0; option broadcast-address 192.168.0.255; option routers 192.168.0.1; option ntp-servers 192.168.0.1; server-name "192.168.0.1"; } #Можно «жёстко» привязать адрес (к МАК-адресу) host Notebook { hardware ethernet 70:F3:95:E7:0A:42; fixed-address 192.168.0.33; }
Тут в целом все логично option domain-name-servers 192.168.0.1 — адрес сервера, который мы указали в настройках сети, subnet 192.168.0.0 — так сказать задание подсети, писать именно 0.0, либо 1.0, 2.0 и т.д, netmask 255.255.255.0 — маска подсети, так же из настроек сетевой, broadcast-address 192.168.0.255 честно скажу не знаю нужен или нет и работает ли он (Broadcast — передача сигналов, например аудио/видео), но в примерах было, поэтому оставил. Так-же можно жестко привязывать MAC-адрес к IP-адресу, в целом полезно когда часто подключаешься к определенным устройствам, чтоб не менялся IP. Делается это в формате
host имя_устройства_1{ hardware ethernet MAC-адрес_1; fixed-address IP-адрес_1; } ................................................................. host имя_устройства_10{ hardware ethernet MAC-адрес_10; fixed-address IP-адрес_10; }
слово host перед названием обязательно, иначе получаем ошибку и наш dhcp не стартует.
На этом настройка dhcpd.conf закончена.
На данном этапе у нас на сервере уже есть интернет, и встроенная сетевая автоматически раздает IP-адреса подключаемым устройствам, но нету связи внешней сетевой с внутренней (eth1 и eth0) т.е необходимо разрешить интернет с eth1 и на eth0.
Делается это все очень просто:
включим форвардинг командой:
echo 1 > /proc/sys/net/ipv4/ip_forward
чтобы форвардинг автоматически включался при запуске системы, добавим в файл /etc/sysctl.conf строку
net.ipv4.ip_forward = 1
затем включаем NAT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
эту команду необходимо добавить в файл /etc/rc.local перед
exit 0
чтобы не выполнять вручную при каждом включении сервера.
Где eth1 название нашего интерфейса, у которого есть доступ к интернету.
Я не знаю на сколько этот способ хороший и правильный, но у меня все работает.
На этом настройка была закончена, все сервисы http, ftp, ssh и т.д работаю как и прежде работали через роутер, никаких правок делать не пришлось.
Позже я обнаружил, что не работает VPN-сервер (pptpd), точнее работает, но как-то странно по локальному IP провайдера подключение проходит и все работает (но в этой петле смысла нету, для проверки не более), а вот по внешнему IP и домену глухо, ошибка 619 и все.
Ну сначала о настройках pptpd
В файл /etc/pptpd.conf дописываем всего 2 строчки
localip 192.168.0.1 remoteip 192.168.0.80-99
Тут совсем все банально, localip — адрес сервера, remoteip — диапазон раздаваемых адресов, для клиентов подключаемых по vpn.
Так же в /etc/pptpd.conf смотрим параметр option, путь к файлу (pptpd-options) дополнительных опций.
В файл /etc/ppp/pptpd-options пишем следующие настройки:
# Требовать от клиента обязательное аутентификации: auth # Укажем файл, в который писать лог: logfile /var/log/pptpd.log name pptpd refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 ms-dns 8.8.8.8 ms-dns 8.8.4.4 proxyarp lock nobsdcomp novj novjccomp
ms-dns — ДНС сервера используемые нашим pptpd, остальное всякие плагины и модули протоколов шифрования, если не вдаваться в подробности.
В файл /etc/ppp/chap-secrets загоняем пользователей, в формате:
# client server secret IP addresses , например: user1 pptpd password1 *
Либо с привязкой пользователя жестко к определенному IP:
user2 pptpd password2 192.168.0.70
На этом все, остается выполнить пару команд для iptables:
# Разрешаем протокол GRE для всех; iptables -A INPUT -p gre -j ACCEPT # Разрешаем соединение с PPTP-сервером для всех; iptables -A INPUT -m tcp -p tcp —dport 1723 -j ACCEPT
Так же в /etc/rc.local нужно добавить еще одну строку
iptables -t mangle -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
перед
exit 0
Без нее подключается, но лично у меня не работала часть сайтов.
Но повторюсь, эти настройки работали успешно при подаче интернета в сервер через роутер, когда сервер так сказать сам стал роутером pptpd отказался работать на внешнем IP, не то чтоб я жить не могу без VPN сервера но решил из принципа разобраться.
Нашел как вариант, активировать модуль ip_nat_pptp.
Все просто, как обычно в /etc/rc.local нужно добавить еще одну строку
modprobe ip_nat_pptp
перед
exit 0
И наш VPN работает на внешнем IP или домене.