Шлюз в интернет и PPTP-сервер для небольшого офиса

()

Некоторое время назад мы рассматривали задачу организации централизованного доступа в Интернет для офисов, расположенных в бизнес-центре. Сейчас рассмотрим немного другую задачу: у организации свой офис, со своим Интернет-каналом, но кроме доступа в Интернет из офиса, нужно организовать доступ в офисную сеть для сотрудников, работающих удалённо.

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

  • Мы будем использовать сервер под управлением операционной системы Ubuntu Server 9.10;
  • На внешнем (eth0) интерфейсе сервера будет адрес 1.2.3.4;
  • Локальная сеть имеет адресное пространство 192.168.2.0/24 и на внутреннем интерфейсе сервера (eth1) находится адрес 192.168.2.1;
  • Офисный шлюз также будет DNS-сервером для своих сетей;
  • Для доступа удалённых пользователей будет использоваться протокол PPTP (так как PPTP-клиент встроен в ОС Windows, которая чаще всего используется на клиентских компьютерах).

Первым делом установим операционную систему на сервер в самой минимальной конфигурации (с этим ни у кого не должно возникнуть проблем) и настроим сетевые интерфейсы.

Дальше создадим скрипт /root/scripts/firewall.sh следующего содержания:

#!/bin/sh

# Минимальные настройки скрипта
# Внешний интерфейс
IF_EXT="eth0"
# Внутренний интерфейс
IF_INT="eth1"
# Локальная сеть
NET_INT="192.168.2.0/255.255.255.0"

# На всякий случай сбрасываем все правила
iptables -F
iptables -F -t nat

# Устанавливаем политики по умолчанию:
# Никого не пускать
iptables -P INPUT DROP
# Всех выпускать
iptables -P OUTPUT ACCEPT
# Мимо нас никто не ходит
iptables -P FORWARD DROP

# Впускаем ответы на запросы, которые сами отправили
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Разрешаем весь трафик на внутреннем интерфейсе
iptables -A INPUT -i lo -j ACCEPT

# Разрешаем весь трафик со стороны локальной сети
iptables -A INPUT -i ${IF_INT} -s ${NET_INT} -j ACCEPT

# Разрешаем весь трафик, который необходим для работы PPTP-сервера
iptables -A INPUT -m tcp -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT

# NAT для локальной сети на внешнем интерфейсе
iptables -t nat -A POSTROUTING -s ${NET_INT} -j MASQUERADE -o ${IF_EXT}
# Разрешаем пересылку пакетов из локальной сети наружу
iptables -A FORWARD -i ${IF_INT} -o ${IF_EXT} -s ${NET_INT} -j ACCEPT
# Разрешаем пересылку в локальную сеть ответов на исходящие запросы
iptables -A FORWARD -i ${IF_EXT} -o ${IF_INT} -d ${NET_INT} -m state --state RELATED,ESTABLISHED -j ACCEPT

Чтобы этот скрипт выполнялся при загрузке нужно добавить его вызов в файле /etc/rc.local:

/root/scripts/firewall.sh

Затем нужно разрешить пересылку IP-пакетов в ядре. Для этого нужно добавить в файл /etc/sysctl.conf строку:

net.ipv4.ip_forward=1

Всё сделанное выше - это только изменения конфигурационных файлов и написание скриптов. Необходимо произвести некоторые действия, чтобы всё это начало работать, но мы сделаем это чуть позже. Пока же установим DNS-сервер, который находится в пакете bind9. Установим этот пакет:

apt-get install bind9

DNS-сервер начинает работать сразу после установки, какая либо особая настройка в нашем случае ему не требуется. Теперь озадачимся установкой PPTP-сервера. Мы уже решали эту задачу, однако сейчас мы рассмотрим не абстрактное решение, а реальное для конкретных условий. Здесь первым делом нужно установить пакет pptpd:

apt-get install pptpd

Далее добавим в файл /etc/ppp/pptpd-options следующие строки:

# Адрес DNS-сервера, который будет передаваться клиенту
ms-dns 192.168.2.1
# Не пытаться восстановить соединение после отключения клиента
# Если не указать эту опцию - pptpd будет безуспешно восстанавливать соединение и ругаться в логи
nopersist

Далее допишем в конец файла /etc/pptpd.conf строки:

# IP-адрес нашего сервера (его будут видеть все клиенты как remote-host в свойствах своего ppp-соединения)
localip 192.168.2.1
# Диапазон адресов клиентов (используется для тех клиентов, для которых IP-адрес не указан явно)
remoteip 192.168.2.250-255

Переходим к созданию пользователей для нашего PPTP-сервера. Они создаются добавлением в файл /etc/ppp/chap-secrets строк вида:

# Если пользователь должен динамически получать IP-адрес
# из диапазона remoteip в pptpd.conf:
user1   pptpd   password1       "*"

# Если мы хотим привязать определённый IP  к логину:
user2   pptpd   password2       "192.168.2.101"

Когда клиент подключается к серверу, для него создаётся новый ppp-интерфейс, однако поскольку для этого интерфейса нет правил iptables, а политики по умолчанию блокируют весь "левый" трафик, то клиент, подключившись, не сможет работать. Чтобы работа стала возможной, нужно при создании нового интерфейса добавлять дополнительные правила в iptables, а при уничтожении - убирать эти правила.

Чтобы при создании интерфейса добавлялись правила, нужно создать скрипт /etc/ppp/ip-up.d/99_pptp_vpn следующего содержания:

#!/bin/sh


# Извлекаем из переменных окружения имя интерфейса и IP-адрес клиента
IF_PPTP=${PPP_IFACE}
IP_PPTP=${PPP_REMOTE}

# Интерфейсы, через которые мы готовы пускать клиента
# Здесь нужно как минимум указать внутренний интерфейс
# Однако если мы хотим так же выпустить клиента в Интернет - нужно указать и внешний интерфейс
OUT_IFACES="eth0 eth1"

# Разрешаем использование нашего DNS-сервера
iptables -A INPUT -m udp -p udp --dport 53 -i ${IF_PPTP} -s ${IP_PPTP} -j ACCEPT

# Перебираем интерфейсы
for IF_EXT in ${OUT_IFACES}; do
    # Разрешаем трафик с клиента через этот интерфейс
    iptables -A FORWARD -i ${IF_PPTP} -o ${IF_EXT} -s ${IP_PPTP} -j ACCEPT
    # Разрешаем трафик с этого интерфейса в сторону клиента
    iptables -A FORWARD -i ${IF_EXT} -o ${IF_PPTP} -d ${IP_PPTP} -m state --state RELATED,ESTABLISHED -j ACCEPT
done

Для удаления правил при уничтожении интерфейса (то есть при отключении клиента) создадим скрипт /etc/ppp/ip-down.d/99_pptp_vpn, следующего содержания:

#!/bin/sh


# Извлекаем из переменных окружения имя интерфейса и IP-адрес клиента
IF_PPTP=${PPP_IFACE}
IP_PPTP=${PPP_REMOTE}

# Интерфейсы, через которые мы были готовы пускать клиента
OUT_IFACES="eth0 eth1"

# Удаляем правило, разрешающее клиенту использование нашего DNS
iptables -D INPUT -m udp -p udp --dport 53 -i ${IF_PPTP} -s ${IP_PPTP} -j ACCEPT

# Перебираем интерфейсы
for IF_EXT in ${OUT_IFACES}; do
    # Удаляем правила, которые разрешали клиенту пересылку пакетов между интерфейсами
    iptables -D FORWARD -i ${IF_PPTP} -o ${IF_EXT} -s ${IP_PPTP} -j ACCEPT
    iptables -D FORWARD -i ${IF_EXT} -o ${IF_PPTP} -d ${IP_PPTP} -m state --state RELATED,ESTABLISHED -j ACCEPT
done

Здесь мы используем тот факт, что все скрипты, которые расположенные в директории /etc/ppp/ip-up.d, выполняются при создании нового ppp-интерфейса, а скрипты из директории /etc/ppp/ip-down.d выполняются при его уничтожении. Перед выполнением этих скриптов устанавливается ряд переменных окружения, в частности:

  • PPP_IFACE - имя создаваемого интерфейса;
  • PPP_REMOTE - IP-адрес второй точки создаваемого ppp-соединения (в случае PPTP-сервера - адрес клиента).

Всё. Теперь остаётся только перезагрузить сервер, чтобы все изменения вступили в силу, и шлюз будет готов к использованию. Если вы не любите (и правильно делаете;)) перезагружать оборудование, то вы можете применить конфигурацию с помощью следующих команд:

# Загружаем правила iptables
/root/scripts/firewall.sh

# Перечитываем sysctl.conf
sysctl -p

# Перезапускаем PPTP-сервер:
invoke-rc.d pptpd restart

В качестве продолжения можно настроить проверку http-трафика на вирусы, фильтрацию рекламы, учёт трафика. Чтобы ограничить аппетиты удалённых пользователей, можно лимитировать им скорость. Если у организации несколько офисов, то можно так же настроить обмен трафиком между ними с помощью OpenVPN. Но всё это мы оставим читателю.

На этом всё. Приятной работы!

Корректор: Регина Васильева (reggi86@mail.ru)

Ключевые слова: pptp, router, office, gateway, iptables, vpn.

Подписаться на обновления: RSS-лента Канал в TamTam Telegram канал Канал в ICQ

Комментарии:

morbo 2009-12-11 14:39:13 (#)

ИМХО статья - малоосмысленный дубль. Всё, что добавилось - это скрипты с фаерволлом, способ настройки которых очевиден.

MooSE 2009-12-11 15:06:33 (#)

ИМХО статья - малоосмысленный дубль. Всё, что добавилось - это скрипты с фаерволлом, способ настройки которых очевиден

Вот тут я не согласен. У меня на написание этих скриптов ушло несколько часов. Раньше я не имел привычки в правилах явно указывать имена интерфейсов и всё работало.

Когда понял что полезно имена интерфейсов указывать - столкнулся с тем что для PPTP нужно динамически добавлять правила и потратил несколько часов на их написание.

PAVka 2009-12-17 08:57:20 (#)

Если у организации несколько офисов, то можно так же настроить обмен трафиком между ними с помощью ___OpenPVN___.

поправьте

MooSE 2009-12-17 11:25:40 (#)

Спасибо. Поправил.

PAVka 2009-12-17 12:05:40 (#)

эх кто бы перевел

http://www.frozentux.net/documents/ipsysctl-tutorial/
http://www.frozentux.net/documents/iptables-tutorial/

согласен даже посодействовать денежкой , небольшой но все таки
а если оформить в виде книги обязательно бы купил

про http://www.opennet.ru/docs/RUS/iptables/iptables-rus.tar.gz в курсе

MooSE 2009-12-17 14:19:07 (#)

А тебе для чего перевод? Переведённая документация обычно хуже оригинальной. На русском разве что HowTo читать. Чтобы посмотреть пример реально использования.

Если есть конкретная задача - отписывай. Может сталкивался или просто интересно и есть возможность попробовать решить...

Anonymous 2010-01-28 17:44:37 (#)

по моему не указано, что
chmod +x /etc/ppp/ip-*.d/99_pptp_vpn

Anonymous 2010-02-03 10:42:23 (#)

Как насчет проверить кто запускает /etc/ppp/ip-*.d/99_pptp_vpn ?

они ведь будут запущены втом числе и когда будут физические интерфейсы самого сервера подниматься.. и (если есть) интерфейс-виланы и тд...

MooSE 2010-02-03 18:03:16 (#)

они ведь будут запущены втом числе и когда будут физические интерфейсы самого сервера подниматься.. и (если есть) интерфейс-виланы и тд...

те скрипты будут срабатывать только когда поднимаются ppp-интерефейсы. я чё-т не слышал что бы мои vlan* и eth* были ppp-интерфейсами. и всё это реально настроено у меня и работаетю

Anonymous 2010-02-05 07:43:45 (#)

да, ступил немного - перепутал с /etc/network/if-up и др...

Anonymous 2010-02-11 16:36:49 (#)

А если просто добавить в фаервол
iptables -A FORWARD -i ppp+ -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o ppp+ -j ACCEPT

Andrey 2010-02-14 04:07:10 (#)

Не пинайте, я только начал осваивать iptables, pptpd.
У меня не получается, сделал всё как тут написано.
Поменял только адреса локалки.Остальные переменные, я так понял берутся из этих скриптов и из ip-up.
Но интернета нет, пока не пропишешь iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE Но когда проверяю ip на каком-нибудь сайте, то мне выдают внешний ip

MooSE 2010-02-15 11:22:36 (#)

не совсем понял что именно не работает?

Andrey 2010-02-15 18:00:09 (#)

Nat

MooSE 2010-02-15 23:33:34 (#)

показывай какие конфиги менял и как.

Anonymous 2010-02-16 17:36:35 (#)

Всё разобрался

MooSE 2010-02-17 09:27:55 (#)

Обычно принято отписывать в чём была проблема:)

Andrey 2010-02-17 16:09:30 (#)

Да просто я сам протупил, я так сказать новичок в этом деле, с сетями раньше не сталкивался и не до конца понимал зачем нужен nat.
Только начинаю изучать iptables, но времени свободного маловато.
Ещё вопросик.
Если есть доступ к серверу, какое правило прописать чтобы с определённого ip локалки, а лучше по мак- адрессу был прямой доступ в интернет, минуя впн?

MooSE 2010-02-18 09:11:16 (#)

точно так же поднять нат:) рекоммендую читать man iptables :)

Andrey 2010-02-18 18:47:07 (#)

Блин, времени сейчас нет на изучение, работаю.
У вас это всё работа, у меня другая.
Вам тяжело написать правило?

Andrey 2010-02-19 21:00:01 (#)

пробовал так
iptables -A INPUT -s x.x.x.x -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -s x.x.x.x -o eth0 -j MASQUERADE

eth0 в интернет
x.x.x.x локальный ip

Не пропускает

MooSE 2010-02-20 02:18:33 (#)

а FROWARD разрешить?

Andrey 2010-02-21 01:27:23 (#)

добавил FORWARD

iptables -t filter -A FORWARD -s eth0 -o X.X.X.X -j ACCEPT
iptables -t filter -A FORWARD -o eth0 -s X.X.X.X -j ACCEPT

результат тот же - не пропускает

Anonymous 2010-02-21 08:59:50 (#)

Попробуй так:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A INPUT -s X.X.X.X -j ACCEPT
iptables -A FORWARD -s X.X.X.X -j ACCEPT
iptables -t nat -A POSTROUTING -s X.X.X.X -j SNAT --to-source Y.Y.Y.Y

где Y.Y.Y.Y внешний ip шлюза,
а внутренний адрес шлюза пропиши в настройках сети компа X.X.X.X

MooSE 2010-02-21 12:38:22 (#)

ваще-т надо так:

iptables -A FORWARD -i eth1 -o eth0 -s 192.168.10.11 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d 192.168.10.11  -m state --state RELATED,ESTABLISHED -j ACCEPT

Andrey 2010-02-21 13:27:18 (#)

не работает, отключаю впн, ввожу правила, интернета нет.

MooSE 2010-02-22 09:45:21 (#)

покажи ВСЕ свои правила и вообще дай больше информации. в противном случае продолжение дискуссии считаю бесмыссленным.

Andrey 2010-02-22 14:02:27 (#)

правила из ваших скриптов, добавил только

iptables -I INPUT -p tcp --destination-port 6881:6999 -j ACCEPT
впн поднимал через abills, freeradius
внешний ip статический, по локалке ip раздаёт dhcp3, и парочка статических ip.На этих статических нужен интернет без впн, и желательно по маку.
Подскажите какую ещё информацию показать, я выложу.

MooSE 2010-02-22 20:05:00 (#)

iptables -L -n -v

iptables -t nat -L -n -v

ifconfig

Andrey 2010-02-22 22:53:05 (#)

iptables -L -n -v

Chain INPUT (policy DROP 5912 packets, 477K bytes)
pkts bytes target prot opt in out source destination
589 28860 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpts:6881:6999
81985 13M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
154 25288 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
616 43130 ACCEPT all -- eth0 * 10.0.0.0/16 0.0.0.0/0
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:1723
0 0 ACCEPT 47 -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT udp -- ppp7 * 10.0.1.29 0.0.0.0/0 udp dpt:53
0 0 ACCEPT udp -- ppp2 * 10.0.1.87 0.0.0.0/0 udp dpt:53
0 0 ACCEPT udp -- ppp3 * 10.0.1.35 0.0.0.0/0 udp dpt:53
0 0 ACCEPT udp -- ppp4 * 10.0.1.49 0.0.0.0/0 udp dpt:53
0 0 ACCEPT udp -- ppp0 * 10.0.1.50 0.0.0.0/0 udp dpt:53

Chain FORWARD (policy DROP 9721 packets, 754K bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- eth0 eth1 10.0.0.0/16 0.0.0.0/0
37 3013 ACCEPT all -- eth1 eth0 0.0.0.0/0 10.0.0.0/16 state RELATED,ESTABLISHED
0 0 ACCEPT all -- ppp7 eth0 10.0.1.29 0.0.0.0/0
0 0 ACCEPT all -- eth0 ppp7 0.0.0.0/0 10.0.1.29 state RELATED,ESTABLISHED
111 12292 ACCEPT all -- ppp7 eth1 10.0.1.29 0.0.0.0/0
126 27754 ACCEPT all -- eth1 ppp7 0.0.0.0/0 10.0.1.29 state RELATED,ESTABLISHED
0 0 ACCEPT all -- ppp2 eth0 10.0.1.87 0.0.0.0/0
0 0 ACCEPT all -- eth0 ppp2 0.0.0.0/0 10.0.1.87 state RELATED,ESTABLISHED
37391 6575K ACCEPT all -- ppp2 eth1 10.0.1.87 0.0.0.0/0
85824 21M ACCEPT all -- eth1 ppp2 0.0.0.0/0 10.0.1.87 state RELATED,ESTABLISHED
0 0 ACCEPT all -- ppp3 eth0 10.0.1.35 0.0.0.0/0
0 0 ACCEPT all -- eth0 ppp3 0.0.0.0/0 10.0.1.35 state RELATED,ESTABLISHED
1622 232K ACCEPT all -- ppp3 eth1 10.0.1.35 0.0.0.0/0
2138 1861K ACCEPT all -- eth1 ppp3 0.0.0.0/0 10.0.1.35 state RELATED,ESTABLISHED
0 0 ACCEPT all -- ppp4 eth0 10.0.1.49 0.0.0.0/0
0 0 ACCEPT all -- eth0 ppp4 0.0.0.0/0 10.0.1.49 state RELATED,ESTABLISHED
2288 264K ACCEPT all -- ppp4 eth1 10.0.1.49 0.0.0.0/0
1895 1231K ACCEPT all -- eth1 ppp4 0.0.0.0/0 10.0.1.49 state RELATED,ESTABLISHED
0 0 ACCEPT all -- ppp0 eth0 10.0.1.50 0.0.0.0/0
0 0 ACCEPT all -- eth0 ppp0 0.0.0.0/0 10.0.1.50 state RELATED,ESTABLISHED
20715 1941K ACCEPT all -- ppp0 eth1 10.0.1.50 0.0.0.0/0
44377 18M ACCEPT all -- eth1 ppp0 0.0.0.0/0 10.0.1.50 state RELATED,ESTABLISHED
0 0 ACCEPT all -- eth0 eth1 10.0.0.7 0.0.0.0/0
0 0 ACCEPT all -- eth1 eth0 0.0.0.0/0 10.0.0.7 state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT 148K packets, 49M bytes)
pkts bytes target prot opt in out source destination

Andrey 2010-02-22 22:55:28 (#)

iptables -t nat -L -n -v

Chain PREROUTING (policy ACCEPT 943K packets, 71M bytes)
pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 50310 packets, 4427K bytes)
pkts bytes target prot opt in out source destination
2397 178K MASQUERADE all -- * eth1 10.0.0.0/16 0.0.0.0/0

Chain OUTPUT (policy ACCEPT 50071 packets, 4410K bytes)
pkts bytes target prot opt in out source destination

Andrey 2010-02-22 23:00:39 (#)

ifconfig


eth0 Link encap:Ethernet HWaddr 00:26:18:d9:9c:60
inet addr:10.0.0.1 Bcast:10.255.255.255 Mask:255.0.0.0
inet6 addr: fe80::226:18ff:fed9:9c60/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:9826161 errors:0 dropped:0 overruns:0 frame:0
TX packets:12442361 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2863375658 (2.6 GB) TX bytes:1512260527 (1.4 GB)
Interrupt:20 Base address:0xb800

eth1 Link encap:Ethernet HWaddr 00:e0:4c:17:b0:4f
inet addr:195.178.32.58 Bcast:195.178.32.59 Mask:255.255.255.253
inet6 addr: fe80::2e0:4cff:fe17:b04f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11806847 errors:0 dropped:0 overruns:0 frame:0
TX packets:8961786 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1087976676 (1.0 GB) TX bytes:2420996961 (2.2 GB)
Interrupt:22 Base address:0xb400

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:14780 errors:0 dropped:0 overruns:0 frame:0
TX packets:14780 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1570872 (1.4 MB) TX bytes:1570872 (1.4 MB)

ppp0 Link encap:Point-to-Point Protocol
inet addr:10.0.0.1 P-t-P:10.0.1.50 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1400 Metric:1
RX packets:40863 errors:0 dropped:0 overruns:0 frame:0
TX packets:85695 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:3452183 (3.2 MB) TX bytes:34952968 (33.3 MB)

ppp1 Link encap:Point-to-Point Protocol
inet addr:10.0.0.1 P-t-P:10.0.1.26 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1400 Metric:1
RX packets:27669 errors:0 dropped:0 overruns:0 frame:0
TX packets:25465 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:2417640 (2.3 MB) TX bytes:32580783 (31.0 MB)

ppp2 Link encap:Point-to-Point Protocol
inet addr:10.0.0.1 P-t-P:10.0.1.87 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1400 Metric:1
RX packets:73568 errors:0 dropped:0 overruns:0 frame:0
TX packets:155161 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:15392822 (14.6 MB) TX bytes:38327886 (36.5 MB)

ppp - не все, там просто куча соединений, я думаю смысла нет все их сюда вылаживать.
да, ксати недавно карта сетевая заглючили, так что теперь, eth1 в интернет, eth0 - в локалку

MooSE 2010-02-24 21:35:39 (#)

У тебя же вроде итак разрешено хождение трафика между eth0 и eth1...

Andrey 2010-02-24 23:11:28 (#)

разрешено, а интернета после отключения впн - нет

MooSE 2010-02-25 12:38:06 (#)

тогда давай свои скрипты... а вообще думаю пора уже на форум переходить обсуждать эту проблему:)

Anonymous 2010-04-26 14:52:48 (#)

Привет всем.
Помогите чайнику поднять шлюз.

две карточки
eth0 - смотрит в инет, ip динамический
eth1 - смотрит в локалку, 192.168.0.254

сервер в инет выходит, все пингуется.
никак не могу настроить чтобы можно было нескольким компам выходить в инет через шлюз.

Я так понимаю на клиентских машинах надо поднимать VPN соединение?
Линукс вижу в глаза только второй день... помогите люди добрые поднять сервак?

MooSE 2010-04-26 17:37:13 (#)

Я так понимаю на клиентских машинах надо поднимать VPN соединение?

Зачем VPN? Ты NAT настроил? Какие настройки на компах в локалке?

Линукс вижу в глаза только второй день... помогите люди добрые поднять сервак?

Вообще не перевариваю этот аргумент. Теория везде одинакова. Если знаешь теорию - гугл тебе поможет с практической реализацией.

Anonymous 2010-04-28 12:28:26 (#)

проблема в том что не клиентская машина (win7) не может выйти в инет.
Дело в том что eth0 - смотрит в инет, ip динамический (получается ip локалки провайдера) и чтобы получить доступ в инет надо поднимать vpn. Появляется еще один интерфейс - ppp0.
Шлюз имеет выход в инет.
На клиентской машине прописываю:
ip 192.168.0.120
mask 255.255.255.0
шлюз 192.168.0.254 (этот ip на eth1)
Я так понимаю что косяк с iptables - если правильно понял то должна быть маршрутизация не с eth0 -> eth1 и наоборот, а eth0 -> ppp0 и наоборот.

MooSE 2010-04-28 14:35:52 (#)

проблема в том что и вход и выход идут через ppp-интерфейс. я знаю что один товарищ разруливал это так: прибил "внешний" линк к ppp999, а в скриптах проверял имя интерфейса и для внешнего интерфейса создавал другой набор правил.

Anonymous 2010-05-24 22:35:58 (#)

А как быть если если один интерфейс (etho) смотри в локалку и через него же создаётся ppp0. т.е. одна карта

Anonymous 2010-12-21 12:55:20 (#)

-bash: /root/scripts/firewall.sh: Отказано в доступе

MooSE 2010-12-21 15:18:13 (#)

-bash: /root/scripts/firewall.sh: Отказано в доступе

А исполимым скрипт кто делать будет?
chmod +x /root/scripts/firewall.sh


то же кстати касается и остальных скриптов, которые приведены в статье.

я думал что это очевидно.

Anonymous 2010-12-21 18:23:00 (#)

в прошлый раз все делал о этой инструкции и все заработало сразу, без каких либо проблем, а вот в этот раз не захотело, система таже Debian

Anonymous 2010-12-21 18:24:05 (#)

ах да, чуть не забыл pptpd не устанавливается...

MooSE 2010-12-21 22:11:12 (#)

ах да, чуть не забыл pptpd не устанавливается...

С какой ошибкой не устанавливается? Телепатов тут нет.

Anonymous 2010-12-22 05:30:16 (#)

ах да, чуть не забыл pptpd не устанавливается...

С какой ошибкой не устанавливается? Телепатов тут нет.

не может найти пакет

MooSE 2010-12-22 17:45:40 (#)


не может найти пакет

Ну и на какие мысли это наводит? Я бы начал с проверки списка подключенных репозиториев.

Anonymous 2010-12-28 03:01:36 (#)

# Разрешаем весь трафик со стороны локальной сети
iptables -A INPUT -i ${IF_INT} -s ${NET_INT} -j ACCEPT

тогда зачем ещё и это?
# Разрешаем весь трафик, который необходим для работы PPTP-сервера
iptables -A INPUT -m tcp -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT

Ведь разрешён весь трафик

MooSE 2010-12-28 03:45:34 (#)

# Разрешаем весь трафик со стороны локальной сети
iptables -A INPUT -i ${IF_INT} -s ${NET_INT} -j ACCEPT

тогда зачем ещё и это?
# Разрешаем весь трафик, который необходим для работы PPTP-сервера
iptables -A INPUT -m tcp -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT

Ведь разрешён весь трафик


Будьте чуточку внимательнее: Первое правило разрешает трафик со стороны локальной сети и только. Вторые два правила разрешают доступ к PPTP-серверу вообще с любой стороны.

Anonymous 2010-12-28 04:30:01 (#)

но это в том случае если по впн нужно подключиться из интернета, а это не всем нужно, а открывать порт в мир просто так....

MooSE 2010-12-28 16:02:06 (#)

но это в том случае если по впн нужно подключиться из интернета, а это не всем нужно, а открывать порт в мир просто так....

Блин. А для чего ещё нужно VPN подключение??? Как раз для доступа в локальную сеть из вне.

Или вы представитель одно из тех быдлопровайдеров, которые используют PPTP для авторизации абонентов?

Procik 2010-12-28 18:24:49 (#)

да, из тех быдлопровайдеров, у абонентов есть выбор между PPTP и PPPOE, а в чём так плох PPTP?

MooSE 2010-12-30 07:55:15 (#)

да, из тех быдлопровайдеров, у абонентов есть выбор между PPTP и PPPOE, а в чём так плох PPTP?

Тем что не создавался и не предназначен для авторизации пользователей. Он создан исключительно для организации туннелей. Да и для этого он кривоват. У него кривой дизайн. Фактически это набор костылей вокруг GRE.

То есть для авторизации он слишком сложен, а для организации туннелей - слишком крив и сливает тому же OpenVPN вчистую. Нахера он нужен вообще?

Его использование в любом случае можно оправдать разве что тем, что PPTP-клиент намертво встроен в Windows. Но я надеюсь что это только дело времени.

Procik 2010-12-30 23:42:01 (#)

Спасибо за внятный ответ, у меня мало опыта и знаний, организовал на впн, потом только понял, что капризный он, теперь сложновато перевести всех.А какое подключение наиболее оптимальное для клиентов с ОС Windows

MooSE 2010-12-31 00:11:23 (#)

А какое подключение наиболее оптимальное для клиентов с ОС Windows
ИМХО PPPoE

Anonymous 2011-01-13 16:33:31 (#)

Пожалуйста подскажите как можно каждому подключению назначить свой внешний IP. В общем ситуация такая, нам для игры нужны разные айпи. Мы купили выделенный сервер, настроили на нем сервер pptp, купили там же дополнительные айпи адреса. Как нам теперь сделать чтобы для каждого пользователя (их всего 4) выдавался отдельный айпи для выхода в интернет.

MooSE 2011-01-13 20:30:57 (#)

Пожалуйста подскажите как можно каждому подключению назначить свой внешний IP. В общем ситуация такая, нам для игры нужны разные айпи. Мы купили выделенный сервер, настроили на нем сервер pptp, купили там же дополнительные айпи адреса. Как нам теперь сделать чтобы для каждого пользователя (их всего 4) выдавался отдельный айпи для выхода в интернет.

Поговорили в аське. Проблема решилась с помощью SNAT: транслируем разных пользователей в разные внешние адреса.

oermolaev 2011-02-08 12:07:58 (#)

Применил эту статью на практике - всё работает. Спасибо!
Почему то не работает поиск по вашему сайту, пишет: 502 Bad Gateway

MooSE 2011-02-08 13:55:10 (#)

Применил эту статью на практике - всё работает. Спасибо!
Почему то не работает поиск по вашему сайту, пишет: 502 Bad Gateway


После обновления с Lenny до Squeeze поломался sphinxsearch. Починю в самое ближайшее время.

UPD: Починил.

Anonymous 2011-07-19 01:50:16 (#)

Люди, пните в правильном направлении, если можно поточнее.
Задача: Сделать удаленный доступ к локальной сети и шлюзу (т.е. доступу к интернету через шлюз в локальной сети) по VPN через отдельную машину.
На машинке есть 2 сетевухи:
eth0 - честный статический внешний IP,
eth1 - LAN статичесикй IP: 10.250.0.240 mask 255.255.255.0.
Внутри сети 10.250.0.0/24 есть шлюз с IP 10.250.0.254.
VPN поднял, шифрование и соединение работает, пользователь привязан на VPN к IP: 10.250.0.243
Подключаюсь, создается ppp0 интерфейс с IP: 10.250.0.243, в таблице маршрутизации нет намека на нужный мне маршрут к IP: 10.250.0.254, это и понятно, я его нигде не указывал.
Пакеты проходят в локальную сеть 10.250.0.0/24, понятно, что в данном случае клиент на VPN имея адрес в данной подсети, путем рассылки broadcast в сети 10.250.0.0/24, получает записи в arp таблицу и пакеты ходят только в этой подсети. Как сделать так, чтобы я с этого VPN адреса ходил во все направления только через локальный шлюз с IP: 10.250.0.254 внутри сети?
Я так понимаю, что надо как-то или на iptables редиректить пакеты в сторону 10.250.0.254 и обратно или же играться с маршрутами, может кто-то, что-то видел или же может однозначно свернуть мне шею в направлении route или в iptables.
Спасибо.

MooSE 2011-07-20 22:01:36 (#)

1. в /etc/iproute2/rt_tables создать новую таблицу маршрутизации:
190	net_vpn


2. При загрузке мащины выполнять что-то вроде:
/sbin/ip rule add from 10.250.0.0/24 lookup net_vpn pref 20000
/sbin/ip route add  default via 10.250.0.254 table net_vpn


Возможно я что-то упустил - проверь. Но основная идея такая: создать отдельную таблицу маршрутизации, указать её для трафика с твоей сети и прописывать в ней все маршруты.

Anonymous 2011-07-26 22:47:30 (#)

спасибо, проверю - отпишусь.

Anonymous 2011-08-17 19:09:55 (#)

В общем задача решилась нетривиально. Как писал MooSE,
1. Добавляем в /etc/iproute2/rt_tables создать новую таблицу маршрутизации типа:
200 net_vpn

2. Скрипт в автозагрузку вида:

#!/bin/sh

ip route add default via 10.250.0.254 dev eth1 table net_vpn
ip rule add from 10.250.0.243 table net_vpn
ip route flush cache

exit 0

Ну и все закрутилось. Спасибо за пинок в нужном направлении.

MooSE 2011-08-17 23:00:14 (#)

Спасибо за пинок в нужном направлении.
Не за что:) Я уважаю когда людям нужна не пошаговая инструкция а просто подсказка "в каком направлении копать". Таким всегда за счастье помочь:)

Anonymous 2011-11-17 20:02:00 (#)

Привет MooSE.
Есть шлюз на US:
ПК в локальной сети получают ИП по дхцп из диапазона 192.168.0.0/24
eth0 (внутренний) - 192.168.0.1
eth1 (внешний) - 10.0.3.15
На eth1 приходит интернет от провайдера (IPoE)

#!/bin/sh

# Eth0 - Внутренний интерфейс
# Eth1 – Внешний интерфейс
# 192.168.0.0/255.255.255.0 – Внутренняя сеть

iptables -F
iptables -F -t nat
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -m tcp -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.0.0/24 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -d 192.168.0.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT

У меня уже так интернет работает!
А как же VPN посредством PPTP/L2TP?
Как пускать сеть 192.168.0.0/24 в интернет только через впн туннели?

MooSE 2011-11-24 01:09:24 (#)

Как пускать сеть 192.168.0.0/24 в интернет только через впн туннели?

А зачем так извращаться?

Anonymous 2011-12-03 22:49:11 (#)

MooSE, а зачем Вы впн поднимаете?
У Вас итак интернет работает

MooSE 2011-12-04 06:10:59 (#)

MooSE, а зачем Вы впн поднимаете?
У Вас итак интернет работает


Хм.... Глупый вопрос ИМХО. Для доступа в офисную сеть извне.

Anonymous 2011-12-04 14:31:14 (#)

Вот этот момент теперь понятен.
А делали связку pptp/l2tp/openvpn + freeradius для авторизации и аккаунтинга?

MooSE 2011-12-04 15:00:28 (#)

Вот этот момент теперь понятен.
А делали связку pptp/l2tp/openvpn + freeradius для авторизации и аккаунтинга?


нет. необходимости не было.

Anonymous 2011-12-05 12:07:16 (#)

MooSE Здраствуйте.

Поднял ВПН и файервол по Вашей статье. Заработало. Удаленный клиент получает статический ИП и понгует машины из локалки. Но из локалки удаленный клиент не пингуется. Где может быть загвоздка?

С уважением
Чайник в Линуксе.

MooSE 2011-12-06 03:47:52 (#)

MooSE Здраствуйте.

Поднял ВПН и файервол по Вашей статье. Заработало. Удаленный клиент получает статический ИП и понгует машины из локалки. Но из локалки удаленный клиент не пингуется. Где может быть загвоздка?

С уважением
Чайник в Линуксе.


Удалённые и локальные машины имеют адреса из одной сети? Опция proxyarp есть?

Anonymous 2011-12-06 09:37:01 (#)

Сетки разные, но по VPN-соединению получают IP локальной сетки 10.0.0.0/24.
Где смотреть наличие Опции proxyarp?

С уважением
Чайник в Линуксе.

Anonymous 2011-12-06 11:13:24 (#)

proxyarp в /etc/ppp/pptpd.options включено.

В /etc/ppp/pptpd.options настройки следующие:

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mppe-128
ms-dns 10.0.0.100
proxyarp
nodefaultroute
lock
nobcdcomp
nopersist

Это все включено.

Из локальной сетки при пинге удаленного клиента первый запрос проходит, затем блокируется.
От удаленного клиента не пингуется 10.0.0.100, но компы из локальной сетки видит.

С уважением
Чайник в Линуксе.

MooSE 2011-12-06 23:09:26 (#)

ну собственно вопросы:
1. Так ли нужно пинговать удалённые компы?
2. Нет ли какихи-то хитрых правил iptables?
3. Может стоит посмотреть в сторону OpenVPN? Он вроде как позволяет эмулировать ethernet и потому с настройками всё немного проще.

oermolaev 2012-10-03 13:24:07 (#)

Подскажите, MooSE, в вашей схеме не предполагается что клиенты должны видеть друг друга?
У меня клиенты не видят друг друга пока не разрешу FORWARD на всех интерфейсах:
iptables -A FORWARD -s ${NET_INT} -j ACCEPT
Полагаю, так делать не правильно. А как правильно сделать?

MooSE 2012-10-06 01:15:16 (#)

Подскажите, MooSE, в вашей схеме не предполагается что клиенты должны видеть друг друга?
У меня клиенты не видят друг друга пока не разрешу FORWARD на всех интерфейсах:
iptables -A FORWARD -s ${NET_INT} -j ACCEPT
Полагаю, так делать не правильно. А как правильно сделать?


Нет. У меня не было такой задачи. Правило в принципе не плохое:) Наверное его хватит:) Но я бы ещё добавил "-d ${NET_INT}"

oermolaev 2012-10-06 05:33:17 (#)

спасибо!

oermolaev 2013-02-08 10:22:19 (#)

Здравствуйте! Есть предположение что такое маленькое значение remoteip
remoteip 192.168.2.250-255
в файле /etc/pptpd.conf может вызывать такую ошибку:
Feb  8 09:31:28 srvvpn kernel: [1538036.066378] pptpctrl[24577]: segfault at 0 ip b76117ff sp bfa03d1c error 4 in libc-2.11.1.so[b759b000+159000]
Feb  8 09:32:18 srvvpn kernel: [1538087.006930] pptpctrl[24578]: segfault at 0 ip b76b27ff sp bfe1074c error 4 in libc-2.11.1.so[b763c000+159000]
Feb  8 09:33:09 srvvpn kernel: [1538137.580945] pptpctrl[24579]: segfault at 0 ip b767b7ff sp bfc247cc error 4 in libc-2.11.1.so[b7605000+159000]
Feb  8 09:33:36 srvvpn kernel: [1538164.924172] pptpctrl[24677]: segfault at 0 ip b76ec7ff sp bf85497c error 4 in libc-2.11.1.so[b7676000+159000]
Feb  8 09:33:37 srvvpn kernel: [1538165.930008] pptpctrl[24678]: segfault at 0 ip b76467ff sp bf974d2c error 4 in libc-2.11.1.so[b75d0000+159000]
Feb  8 09:33:38 srvvpn kernel: [1538166.935829] pptpctrl[24679]: segfault at 0 ip b76767ff sp bfc90e0c error 4 in libc-2.11.1.so[b7600000+159000]
и невозможность подключения новых клиентов. После увеличения этого диапазона подобных ошибок пока не наблюдалось

MooSE 2013-02-08 12:46:57 (#)

Здравствуйте! Есть предположение что такое маленькое значение remoteip в файле /etc/pptpd.conf может вызывать такую ошибку:

Подозреваю что тут всё сильно зависит от числа клиентов, которым ты хочешь одновременно разрешить подключаться. И если лимит кончился - тогда начинает валиться ошибка.

oermolaev 2013-02-08 15:00:23 (#)

Угу. У меня их всего двадцать, но все они ломятся в одно время - в 8:00 :) Жаль что сервис зависает и самостоятельно уже не выходит в рабочий режим.

MooSE 2013-02-09 04:25:04 (#)

Угу. У меня их всего двадцать, но все они ломятся в одно время - в 8:00 :) Жаль что сервис зависает и самостоятельно уже не выходит в рабочий режим.

Попробуй им жёстко адреса привязать кстати:) Не из указанного диапазона, а отдельные.

И тебе за ними следить удобнее, и диапазон останется целым на всякий случай:)

oermolaev 2013-02-15 23:57:06 (#)

Адреса были изначально жестко прописаны в /etc/ppp/chap-secrets, и не из указанного диапазона, а отдельные. Но это не решало проблему одновременного подключения. Если только надо было их ещё прописать у клиентов?
Впрочем, проблема то уже решена.
PS: Жаль что нет уведомления на e-mail об ответах на комментарии.

MooSE 2013-02-16 17:59:13 (#)

Адреса были изначально жестко прописаны в /etc/ppp/chap-secrets, и не из указанного диапазона, а отдельные. Но это не решало проблему одновременного подключения. Если только надо было их ещё прописать у клиентов?

У клиентов не надо. Но вообще странно. Чую что тут есть бага...


PS: Жаль что нет уведомления на e-mail об ответах на комментарии.

Я правильно понимаю что это фичереквест? :)

Если да то по-тихоньку могу заняться этой фичей. Всё равно сейчас неспешно переделываю движок.

oermolaev 2013-02-21 12:53:47 (#)

Не нашел точного значения понятия "фичереквест", но по контексту понял :)
Да, конечно, было бы удобно. Ведь зачем то мы указываем свой e-mail при регистрации? ;)

MooSE 2013-02-21 20:51:41 (#)

Не нашел точного значения понятия "фичереквест", но по контексту понял :)
Да, конечно, было бы удобно. Ведь зачем то мы указываем свой e-mail при регистрации? ;)


Фичереквест это от "feature request". Т.е. запрос возможности.

Когда-то тут были личные сообщения. Но потом я их убрал, так как никто не пользовался.

Ну вобщем понял. Есть какие-то пожелания к реализации? Ну т.е. слать ответы на все темы где ты отписывался, или подписываться на конкретную тему? Или слать только когда отвечают на твой комментарий?

oermolaev 2013-02-24 12:01:08 (#)

1)слать ответы на все темы где ты отписывался, или 2)подписываться на конкретную тему? Или 3)слать только когда отвечают на твой комментарий
Я бы подписался на всю активность сайта, включая новости, но у юзера должно быть право выбора подписки по пунктам :)

MooSE 2013-02-24 13:12:19 (#)


Я бы подписался на всю активность сайта, включая новости, но у юзера должно быть право выбора подписки по пунктам :)


Понял:) Займусь по мере появления свободного времени:)
Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2024 Вадим Калинников aka MooSE
Политика конфиденциальности