Исходные данные: Ubuntu server 9.04 с одной сетевухой подключенный к инет и косп WinXP на другом конце города тоже с подключением к инет. Пробросил OpenVPN.
Конфиг VPN на сервере:
#режим сервера
mode server
#использовать TLS-аутентифкацию
tls-server
tls-timeout 120
#прослушивание по tcp-протоколу
proto tcp-server
#использовать tap устройство
dev tap
#dev-node tap0
#прослушиваемый порт 1194
port 1194
#скрипт который будет выполнятся при поднятии впн туннеля
#up /etc/openvpn/upscript.sh
#режим демона
daemon
#TLS-ключ
tls-auth /etc/openvpn/keys/ta.key 0
#указываем файл с CA
ca /etc/openvpn/keys/ca.crt
#сертификат сервера
cert /etc/openvpn/keys/wanderer.crt
#указываем ключ сертификата
key /etc/openvpn/keys/wanderer.key
#файл Диффи-Хеллмана
dh /etc/openvpn/keys/dh1024.pem
#указываем IP-адрес сервера и маску виртуальной сети
ifconfig 192.168.248.1 255.255.255.0
#описываем наш vpn пул
#IP-адрес через push "ifconfig адрес маска"
#ifconfig-pool 192.168.0.1 192.168.254.254
# Если вы хотите, что бы за клиентами закреплялись постоянные адреса,
# добавьте следующий параметр:
# Он определяет файл, в котором будет сохраняться информация о машине и ее IP.
# Файл содержит строки:
# Имя машины,IP адрес. Во время работы.
# Cервер с периодичностью в 600 секунд обновляет содержимое этого файла.
# При включении, сервер читает содержимое файла.
# Эта обция НЕ РАБОТАЕТ если включено duplicate-cn
#ifconfig-pool-persist /var/log/openvpn-ipp.txt
# В этом файле сохраняется информация о текущих соединениях сервера.
status /var/log/openvpn-status.log 1
status-version 2
# Установите серверный режим для ethernet моста.
# Вы должны сначала в своей ОС настроить мост
# между TAP и NIC интерфейсом.
# Затем вы должны вручную установить
# IP/маску на мост, к примеру 10.8.0.4/255.255.255.0.
# В заключении мы должны установить диапазон IP
# адресов в этой подсети для выделения клиентам
# (начало=10.8.0.50 конец=10.8.0.100).
# Оставьте эту строку закоментированной, если вы
# не используете ethernet мост.
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
route 192.168.48.0 255.255.255.0
# Добавляем клиенту необходимые маршруты на локальные подсети, например:
push "route 192.168.48.0 255.255.255.0"
# Шлюз для вышеуказанных маршрутов
push "route-gateway 192.168.248.1"
# разрешаем обмен трафиком между клиентами
client-to-client
#разрешаем дублирование сертифкатов
#если упустить эту опцию то на каждого клиента надо
#генерировать отдельный сертификат с помощью pkitool
#duplicate-cn
#включаем режим отладки
verb 3
#алгоритм шифрования.Список алгоритмов можно получить
#с помощью команды openvpn --show-ciphers
cipher DES-EDE3-CBC
#не перечитывать ключ при сбросе соединения
persist-key
#лог файл
log-append /var/log/openvpn.log
persist-tun
#включаем сжатие
comp-lzo
# Это хорошая идея запускать процесс OpenVPN
# от имени непривелигированного пользователя.
#
# Вы можете раскоментировать эти строки
# для не-Windows систем.
;user nobody
;group nobody
Обращаю внимание, что использовано tap устройство и соответственно tcp протокол.
проблема в следующем с клиента виден сервер, причем как по внутреВПН ip так и по ip внутри его локальной сети, но не один комп в локальной сети не пингуется.
Собственно вопрос что не так, почему не проходит форвардинг?
на всяк случай настройки iptables:
# Задаем некоторые переменные:
# Переменная, задающая путь к файлу запуска iptables.
IPT="/sbin/iptables"
# Ваш сетевой интерфейс. Это нужно, чтобы не писать в правилах одно и тоже.
INET_IFACE="eth0"
#Маска локальной сети
NET_MASK="192.168.48.0/255.255.255.0"
# Номера непривилегированных портов
UNPRIPORTS="1024:65535"
# Включить перенаправление пакетов через ядро.
echo 1 > /proc/sys/net/ipv4/ip_forward
# Сбросить правила и удалить цепочки.
$IPT -F
$IPT -X
# Политики по умолчанию
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
# $IPT -P INPUT ACCEPT
# $IPT -P OUTPUT ACCEPT
# $IPT -P FORWARD ACCEPT
# Разрешаем прохождение любого трафика по интерфейсу обратной петли.
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# Запрещаем любые новые подключения с любых интерфейсов, кроме lo к компьютеру.
# $IPT -A INPUT -m state ! -i lo --state NEW -j DROP
# Если интерфейс не lo, то запрещаем входить в список его адресов.
# $IPT -A INPUT -s 127.0.0.1/255.0.0.0 ! -i lo -j DROP
# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
# Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим признак ESTABLISHED.
# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Эти правила предохраняют от некоторых типов атак:
# SYN наводнение.
# Приводит к связыванию системных ресурсов, так что реальных обмен данными становится не возможным.
# $IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
# $IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
# UDP наводнение
# Службы использующие UDP, очень часто становятся мишенью для атак с целью вывода системы из строя.
# $IPT -A INPUT -p UDP -s 0/0 --destination-port 138 -j DROP
# $IPT -A INPUT -p UDP -s 0/0 --destination-port 113 -j REJECT
# $IPT -A INPUT -p UDP -s 0/0 --source-port 67 --destination-port 68 -j ACCEPT
# $IPT -A INPUT -p UDP -j RETURN
# $IPT -A OUTPUT -p UDP -s 0/0 -j ACCEPT
# ICMP - перенаправление
# ICMP - сообщение указывает системе изменить содержимое таблиц маршрутизации с тем, что бы направлять
# пакеты по более короткому маршруту. Может быть использовано взломщиком для перенаправления вашего трафика через свою машину.
$IPT -A INPUT --fragment -p ICMP -j DROP
$IPT -A OUTPUT --fragment -p ICMP -j DROP
# Разрешаем ICMP соединение. Значительная часть ICMP используется для передачи сообщений о
# том, что происходит с тем или иным UDP или TCP соединением.
$IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type source-quench -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type source-quench -j ACCEPT
# Разрешаем себе ping наружу - нас же не попингуешь - пакеты отбрасываются.
$IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type echo-reply -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type echo-request -j ACCEPT
# Разрешаем передачу пакета - некорректный параметр - используется, если в заголовке пакета содержится недопустимая запись,
# или если контрольная сумма заголовка не соответствует контрольной сумме, указанной передающим узлом.
# $IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type parameter-problem -j ACCEPT
# $IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type parameter-problem -j ACCEPT
# Запрещаем подключение к X серверу через сетевые интерфейсы.
# $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 6000:6063 -j DROP --syn
# Прописываем порты, которые открыты в системе, но которые не должны быть открыты на сетевых интерфейсах:
# $IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE -j DROP --dports #порта
# $IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE -j DROP --dports 783
# $IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE -j DROP --dports 3310
# $IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE -j DROP --dports 10000
# DNS сервер имен разрешаем.
$IPT -A OUTPUT -p udp -m udp -o $INET_IFACE --dport 53 --sport $UNPRIPORTS -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 53 --sport $UNPRIPORTS -j ACCEPT
$IPT -A INPUT -p udp -m udp -i $INET_IFACE --dport $UNPRIPORTS --sport 53 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 1024:65353 --sport 53 -j ACCEPT
# Разрешаем AUTH-запросы на удаленные сервера, на свой же компьютер - запрещаем.
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 113 --sport $UNPRIPORTS -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 113 -j ACCEPT ! --syn
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 113 -j DROP
# Открываем некоторые порты:
# SSH сервер (22) OpenVPN (1194)
$IPT -A INPUT -p tcp -i $INET_IFACE -m multiport --destination-port 22,1194 -j ACCEPT
$IPT -A OUTPUT -p tcp -o $INET_IFACE -m multiport --source-port 22,1194 -j ACCEPT
$IPT -A INPUT -p udp -i $INET_IFACE -m multiport --destination-port 1194 -j ACCEPT
$IPT -A OUTPUT -p udp -o $INET_IFACE -m multiport --source-port 1194 -j ACCEPT
#Открытие SSH (22) Samba (137,138/udp, 139,445/tcp) HTTP/HTTPS сервер (80, 443) ТОЛЬКО для локальной сети
$IPT -A INPUT -p tcp -s $NET_MASK -i $INET_IFACE -m multiport --destination-port 80,443,139,445 -j ACCEPT
$IPT -A OUTPUT -p tcp -s $NET_MASK -o $INET_IFACE -m multiport --source-port 80,443,139,445 -j ACCEPT
$IPT -A INPUT -p udp -s $NET_MASK -i $INET_IFACE -m multiport --destination-port 137,138 -j ACCEPT
$IPT -A OUTPUT -p udp -s $NET_MASK -o $INET_IFACE -m multiport --source-port 137,138 -j ACCEPT
#Открытие SSH (22) Samba (137,138/udp, 139,445/tcp) HTTP/HTTPS сервер (80, 443)
$IPT -A INPUT -p tcp -m multiport --destination-port 80,443,139,445 -j ACCEPT
$IPT -A OUTPUT -p tcp -m multiport --source-port 80,443,139,445 -j ACCEPT
$IPT -A INPUT -p udp -m multiport --destination-port 137,138 -j ACCEPT
$IPT -A OUTPUT -p udp -m multiport --source-port 137,138 -j ACCEPT
# HTTP/HTTPS клиент (80, 443)
$IPT -A OUTPUT -p tcp -m tcp -m multiport -o $INET_IFACE --sport $UNPRIPORTS -j ACCEPT --dports 80,443
$IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE --dport $UNPRIPORTS -j ACCEPT --sports 80,443 ! --syn
# OpenVPN (1194)
# $IPT -A INPUT -p tcp --dport 1194 -j ACCEPT
$IPT -A INPUT -i tap0 -j ACCEPT
$IPT -A OUTPUT -o tap0 -j ACCEPT
$IPT -A FORWARD -i tap0 -o eth0 -j ACCEPT
$IPT -A FORWARD -i eth0 -o tap0 -j ACCEPT
Пользователь решил продолжить мысль 18 Января 2010, 22:41:16:
И вдогонку, объясните популярно, когда лучше использовать tun устройства, а когда tap?