Yellow Leaf

Yellow Leaf


Поиск по сайту


Вход
Правила портала
Регистрация
Забыли пароль?
О команде проекта
Справка по оформлению постов


Последние комментарии к новостям и статьям
Re: С днём системного администратора!
Re: Вышел новый номер v10.07(2) компьютерного журнала UserAndLINUX.
Re: Отчет о первом "Runtu InstallFest" в Екатеринбурге
Re: OpenVPN сервер для офисного шлюза на FreeBSD
Re: Релиз Runtu LXDE 10.04!
Ещё комментарии >>>


Новые файлы
Debian: cue2tracks_0.2.11_all (Дополнение для CUE 2 Tracks v0.2.11)
Gentoo: cue2tracks-0.2.11 (Дополнение для CUE 2 Tracks v0.2.11)
CUE 2 Tracks v0.2.11
Jabber-Shell 20090303
EasySoft AutoRun 0.4.1


Новое на форуме
Движок сайта. версия 2.0
Нужен логопед, срочно
Словить процесс
проблемы с разделом жесткого диска
планировщик, веб интерфейс


Проекты
Jabber-Shell
Qmmp
QStarDict
PHPSAAdmin


 
   


Друзья сайта
 Open Kazan - Казанское сообщество пользователей OpenSource 


Посетителей с 08.09.2006

4671549


Внешний вид портала


RSS-Ленты
Новости
Файлы


 

   
  Яндекс цитирования  

«Жёлтый Лист» - cайт о мире юникс
Новости Форум Статьи Файлы Пользователи
   

PPTP через NAT на Linux

MooSE 2008-03-12 12:12:08

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

Но обо всё по порядку. Для начала уточним что шлюз выпускал в интернет две локальных сети - 192.168.111.0/255.255.255.0 и 192.168.50.0/255.255.255.0, и кроме NAT на нём был поднят прозрачный прокси (хотя это уже точно отношения к делу не имеет:)).

Сервер работает под управлением Ubuntu Server 7.10. Все правила iptables описываются в скрипте /root/scripts/firewall.sh, который в свою очередь запускается из /etc/rc.local.

Скрипт /root/scripts/firewall.sh имеет примерно такое содержание:

#!/bin/sh

# Flush all tables to default:
iptables -F
iptables -F -t nat

# Setting up default politics:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# Allow established connections:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow all for loopback:
iptables -A INPUT -i lo -s 127.0.0.0/255.0.0.0 -j ACCEPT

# Allow all for local networks
iptables -A INPUT -s 192.168.50.0/255.255.255.0  -j ACCEPT
iptables -A INPUT -s 192.168.111.0/255.255.255.0 -j ACCEPT

# Allow ICMP for all
iptables -A INPUT -p icmp -j ACCEPT


# Nat for local networks:
# 192.168.50.0/24:
iptables -t nat -A PREROUTING -s 192.168.50.0/255.255.255.0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -s 192.168.50.0/255.255.255.0 -j MASQUERADE
iptables -A FORWARD -s 192.168.50.0/255.255.255.0 -j ACCEPT
iptables -A FORWARD -d 192.168.50.0/255.255.255.0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 192.168.111.0/24:
iptables -t nat -A PREROUTING -s 192.168.111.0/255.255.255.0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -s 192.168.111.0/255.255.255.0 -j MASQUERADE
iptables -A FORWARD -s 192.168.111.0/255.255.255.0 -j ACCEPT
iptables -A FORWARD -d 192.168.111.0/255.255.255.0 -m state --state RELATED,ESTABLISHED -j ACCEPT

Из скрипта убраны лишние правила, не относящиеся к делу. Невооружённым глазом видно что никаких специальных правил для PPTP нет и соответственно он должен работать без проблем, однако не работает.

Вдумчивое чтение документации дало толчок к осознанию проблемы: в случае с PPTP, как и с активным FTP, не достаточно просто подменять заголовки IP-пакетов. Чтобы корректно натить PPTP нужно залезть чуть глубже - в сам IP-пакет и модифицировать заголовки PPTP-пакетов. Эту проблему решает модуль ip_nat_pptp. Проблема решилась добавлением в конец скрипта строки:

/sbin/modprobe ip_nat_pptp

Надеюсь что эта информация была полезной.

Ключевые слова: pptp nat linux ip_nat_pptp

Версия для печати

Возможно вас заинтересуют следующие товары:


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

lastcrowler 2009-02-17 14:54:45 (*)

Справедливо для ядер 2.6, если ядро 2.4, то потребуется прописывать следующие правила:

iptables -A INPUT -i ${INT_IFACE} -p 47 -j ACCEPT
iptables -A OUTPUT -o ${INT_IFACE} -p 47 -j ACCEPT
iptables -A FORWARD -p TCP -s ${INT_NET} \
--sport $UNPRIVPORTS --dport 1723 -j ACCEPT
iptables -A FORWARD -p TCP -d ${INT_NET} -m state \
--state ESTABLISHED,RELATED --sport 1723 \
--dport $UNPRIVPORTS -j ACCEPT
iptables -A FORWARD -p 47 -s ${INT_NET} -j ACCEPT
iptables -A FORWARD -p 47 -d ${INT_NET} -j ACCEPT

[Ответить]


Анонимный посетитель 2010-02-14 07:23:26 (*)

Спасибо, очень выручил!

[Ответить]


Содержание*:
=

При копировании материалов с этого сайта ссылка на источник обязательна! Уважайте труд авторов!


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

рублей


Обратная связь


© 2006-2010 Вадим Калинников aka MooSE


Автолитература от АвтоДата. Диагностика автомобилей, ремонт и эксплуатация. . Домофоны, видеодомофон Алагир. Домофоны, видеодомофон Гусев. . Мебель кухни, вопросы на сайте. Для кухни.