Всем доброго времени суток. Столкнулся со следующей проблемой. Подключение проходит успешно с клиента пингую адрес сервера (192.168.100.1) и наоборот, но не пингую сеть за сервером (192.168.116.0/24). Насколько я понимаю, косяк где-то в настройках маршрутизации и iptables, но не врубаюсь где именно. И все это происходит при следующих параметрах :
192.168.100.0/24 - VPN сеть 192.168.116.0/24 - сеть за сервером 192.168.116.32 - адрес сервера 1 192.168.100.1 - адрес сервера vpn xx.yy.zz.203 - внешний адрес сервера
Интерфейсы eth0 ip 192.168.116.32 mask 255.255.255.0 - -
eth1 IP xx.yy.zz.203 Маска 255.255.255.240 Шлюз xx.yy.zz.193
tun0
ip 192.168.100.1 mask 255.255.255.0
Команда route на сервере:
Таблица маршрутизации ядра протокола IP
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.2 * 255.255.255.255 UH 0 0 0 tun0
xx.yy.zz.192 * 255.255.255.240 U 1 0 0 eth1
192.168.116.0 * 255.255.255.0 U 1 0 0 eth0
192.168.100.0 192.168.100.2 255.255.255.0 UG 0 0 0 tun0
link-local * 255.255.0.0 U 1000 0 0 eth1
default xx.yy.zz.193 0.0.0.0 UG 0 0 0 eth1
Команда route на подключенном клиенте:
Активные сетевые маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.100 20
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.0.0 255.255.255.0 192.168.0.100 192.168.0.100 20
192.168.0.100 255.255.255.255 127.0.0.1 127.0.0.1 20
192.168.0.255 255.255.255.255 192.168.0.100 192.168.0.100 20
192.168.100.0 255.255.255.0 192.168.100.5 192.168.100.6 1
192.168.100.4 255.255.255.252 192.168.100.6 192.168.100.6 30
192.168.100.6 255.255.255.255 127.0.0.1 127.0.0.1 30
192.168.100.255 255.255.255.255 192.168.100.6 192.168.100.6 30
224.0.0.0 240.0.0.0 192.168.0.100 192.168.0.100 20
224.0.0.0 240.0.0.0 192.168.100.6 192.168.100.6 30
255.255.255.255 255.255.255.255 192.168.0.100 192.168.0.100 1
255.255.255.255 255.255.255.255 192.168.100.6 10005 1
255.255.255.255 255.255.255.255 192.168.100.6 192.168.100.6 1
255.255.255.255 255.255.255.255 192.168.100.6 3 1
Основной шлюз: 192.168.0.1
конфиг сервера
port 1194
proto udp
dev tun
;dev-node tap0
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key # This file should be kept secret
dh /etc/openvpn/keys/dh1024.pem
server 192.168.100.0 255.255.255.0 # vpn subnet
ifconfig-pool-persist "/etc/openvpn/config/ipp.txt"
push "route 192.168.100.0 255.255.255.0"
push "route 192.168.116.0 255.255.255.0"
;duplicate-cn
keepalive 10 120
;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /etc/openvpn/log/openvpn-status.log
log /etc/openvpn/log/openvpn.log
log-append /etc/openvpn/log/openvpn.log
verb 3
mute 20
client-to-client
client-config-dir /etc/openvpn/ccd
В папке /etc/openvpn/ccd лежит файл client1 (имя сертификата под которым подключается клиент) с содержимым:
iroute 192.168.116.0 255.255.255.0
Конфиг клиента
client
dev tun
proto udp
remote xx.yy.zz.203 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca geo\\ca.crt
cert geo\\client1.crt
key geo\\client1.key
comp-lzo
verb 3
mute 20
В iptables пробовал следующие варианты:
Вариант1
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
Вариант2. Запускал такой скрипт.
# маски используемых сетей
IP_LAN="192.168.116.1/24" # моя домашняя сеть
# интерфейсы
IF_LAN="eth0" # сюда подключена локальная сеть
IF_INET="eth1" # сюда "подключен" интернет
IF_VPN="tun0" # это интерфейс нашего vpn
IPT="iptables"
# cleaning:
$IPT --flush
$IPT -t nat --flush
$IPT -t mangle --flush
$IPT -X
# тут по желанию и степени паранои
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
# allow loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
###
# local host:
# allow outgoing connections:
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# разрешаем подключения к vpn
$IPT -A INPUT -p udp --dport 1194 -j ACCEPT
# разрешаем NAT из локальной сети и VPN:
$IPT -t nat -A POSTROUTING -o $IF_INET -j MASQUERADE
$IPT -A FORWARD -i $IF_LAN -o $IF_INET -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i $IF_INET -o $IF_LAN -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i $IF_VPN -o $IF_INET -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i $IF_INET -o $IF_VPN -m state --state ESTABLISHED,RELATED -j ACCEPT
Вариант3.
iptables -A FORWARD -i eth1 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth1 -j ACCEPT
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -A OUTPUT -o tun0 -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -I OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
Еще я не очень понимаю как опередлит какой набор правил в iptables работает в данный момент. между каждым вариантами правил делал очистку iptables --flush iptables -t nat --flush iptables -t mangle --flush iptables -X
Форвардинг тоже включен. Т.е в /etc/sysctl.conf
net.ipv4.ip_forward = 1 net.ipv4.ip_dynaddr = 1
Еще в лога клиента проскакивает вот такая ошибка:
Mon Nov 23 23:48:40 2009 us=104299 PUSH: Received control message: 'PUSH_REPLY,route 192.168.100.0 255.255.255.0,route 192.168.100.0 255.255.255.0,topology net30,ping 10,ping-restart 120,ifconfig 192.168.100.6 192.168.100.5'
Mon Nov 23 23:48:40 2009 us=104355 Options error: Unrecognized option or missing parameter(s) in [PUSH-OPTIONS]:3: topology (2.0.9)
Подскажите, что я делаю не так. Спасибо )