Войти

Показать полную графическую версию : OpenVPN + IPFW Kernel NAT


VoxVeritas
06-10-2015, 23:38
Здравствуйте коллеги.
Сам я не новичек в UNIX системах, но вот на днях столкнулся с непонятно проблемой.
Имею FreeBSD 10.0 х64 в качестве рабочего шлюза в компании.
Инет через PPPoE. Поднят MPD5 для VPN клиентов по PPTP. И стоит SQUID
Все исправно работает. Инет у всех на работе есть, фильтрация, клиенты по VPN подключаются и т.д.

Но есть один сотрудник, который живет в Польше. И он не может подключиться по VPN.
Наверное провайдеры там блокируют GRE.

Было решение поднять на шлюзе OpenVPN.
Установил, настроил. Коннект происходит. Но вот LAN в офисе не доступен.
Пингуется только 10.8.0.1

Что только не делал: и различные правила в IPFW и варианты директив push, route в конфиге openvpn.conf


Но вот что самое главное.
У меня дома развернута на виртуалке LAN сеть для теста.
Там у меня 3 гостевых системы. Первая FreeBSD, вторая CentOS, третья Винда
FreeBSD 10.1 х86
Настроен IPFW + Kernel NAT. И установлен и настроен OpenVPN.

Так вот. C моей хостовой машины коннект идет на виртуальную FreeBSD и далее я могу подключиться по RDP к Винде.
А вот на FreeBSD в офисе коннект есть, но до локалки не достучаться.

Вроде все настроки идентичны (ipfw, openvpn.conf), как на виртуалке, так и на рабочей машине.
И теперь я не пойму что за фигня такая.

Единственное осталось грешить на конфликт интерфейсов tun. Но это вроде смахивает на фантастику.

IPFW


#!/bin/sh
fwcmd="ipfw"
LanIf="re1"
LN="192.168.0.0/24"
LanIp="192.168.0.2"
WanIf="tun0"
WanIp="84.201.232.226"

${fwcmd} -f flush
${fwcmd} add 1 allow ip from any to any via lo0
${fwcmd} add 300 deny ip from any to 127.0.0.0/8
${fwcmd} add 301 deny ip from 127.0.0.0/8 to any
${fwcmd} add 319 allow all from any to me 5192 via tun0 setup limit src-addr 2
#${fwcmd} add 350 allow all from any to any via ${LanIf} keep-state
#${fwcmd} add 351 allow all from any to any via ${WanIf} keep-state
${fwcmd} add 400 allow icmp from any to any icmptypes 0,8,11
${fwcmd} add 411 allow all from 192.168.1.0/24 to any via re1
${fwcmd} add 412 allow all from any to 192.168.1.0/24 via re2 setup keep-state
${fwcmd} add 500 check-state
############################# DNS
${fwcmd} add 700 allow udp from any to ${WanIp} 53 in via ${WanIf}
${fwcmd} add 710 allow udp from ${WanIp} 53 to any out via ${WanIf}
${fwcmd} add 712 allow udp from any 53 to ${WanIp} in via ${WanIf}
${fwcmd} add 714 allow udp from ${WanIp} to any 53 out via ${WanIf}
############################## DNS

############################### VPN SERVER
${fwcmd} add 800 allow all from any to me 1723
${fwcmd} add 801 allow all from me 1723 to any
${fwcmd} add 802 allow gre from any to any

${fwcmd} add 820 allow all from any to any via tun9
${fwcmd} add 821 allow all from any to ${WanIp} 1194 in via ${WanIf} setup keep-state
${fwcmd} add 822 allow all from 10.8.0.0/24 to ${LN} out via ${LanIf} setup keep-state
############################ VPN SERVER
#${fwcmd} add 900 allow all from any to any via ${LanIf} keep-state
#${fwcmd} add 901 allow all from any to any via ${WanIf} keep-state
############################ SQUID
${fwcmd} add 950 allow tcp from me to any out via ${LanIf} keep-state uid squid
${fwcmd} add 951 fwd 127.0.0.1,3121 tcp from ${LN} to any 21,80,443 out via ${WanIf}
############################ NAT
${fwcmd} add 984 allow all from ${WanIp} to any out via ${WanIf} keep-state
${fwcmd} add 985 allow all from ${LN} to any in via ${LanIf}
${fwcmd} add 987 nat 1 all from ${LN} to any out via ${WanIf}
${fwcmd} add 989 nat 1 all from any to ${WanIp} in via ${WanIf}
${fwcmd} add 990 allow all from any to ${LN} out via ${LanIf}
${fwcmd} nat 1 config log if ${WanIf} deny_in reset same_ports unreg_only
############################# NAT
############################# NAT 2
#${fwcmd} add 1003 nat 2 all from 10.8.0.0/24 to any
#${fwcmd} add 1006 nat 2 all from any to ${WanIp}
#${fwcmd} nat 2 config log if ${WanIp}
############################# NAT 2
############################# NAT 3
#${fwcmd} add 1008 nat 2 all from 10.8.0.0/24 to any
#${fwcmd} add 1009 nat 2 all from any to 10.8.0.0/24
#${fwcmd} nat 2 config log if tun9
############################# NAT 3

${fwcmd} add 3000 allow all from any to any via ${LanIf}
${fwcmd} add 3100 allow all from ${LN} to any setup
#${fwcmd} add 3150 allow all from any to any via ${LanIf} keep-state
#${fwcmd} add 3151 allow all from any to any via ${WanIf} keep-state
${fwcmd} add 3200 allow tcp from any to any established


как видно, я пытался и разрешающие правила добавлять и НАТить VPN


openvpn.conf


port 1194
proto tcp
dev tun9
server 10.8.0.0 255.255.255.0
# добавлял push - все-равно не работает, тем более на виртуалке и без этого работает
;push "route 192.168.0.0 255.255.255.0"
keepalive 10 120
comp-lzo
persist-key
persist-tun
verb 3


rc.conf


ifconfig_re1="inet 192.168.0.2 netmask 255.255.255.0" # To LAN
ifconfig_re2="inet 192.168.1.2 netmask 255.255.255.0" # To Modem
gateway_enable="YES"
ppp_enable="YES"
ppp_mode="ddial"
ppp_profile="tcm"
firewall_enable="YES"
firewall_nat_enable="YES"
firewall_script="/etc/ipfw"
firewall_logging="YES"
mpd_enable="YES"
openvpn_enable="YES"


netstat -rn


Routing tables

Internet:
Destination Gateway Flags Refs Use Netif Expire
default 84.201.225.100 UGS 0 146452 tun0
10.8.0.0/24 10.8.0.2 UGS 0 0 tun9
10.8.0.1 link#6 UHS 0 0 lo0
10.8.0.2 link#6 UH 0 0 tun9
84.201.225.100 link#5 UHS 0 0 tun0
84.201.232.226 link#5 UHS 0 518 lo0
127.0.0.1 link#4 UH 0 2647 lo0
192.168.0.0/24 link#2 U 0 204874 re1
192.168.0.2 link#2 UHS 1 0 lo0
192.168.0.60 link#7 UH 0 9348 ng0
192.168.1.0/24 link#3 U 0 236 re2
192.168.1.2 link#3 UHS 0 0 lo0


ifconfig


re1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
ether ec:22:80:eb:9f:f7
inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
media: Ethernet autoselect (none)
status: no carrier
re2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
ether 38:2c:4a:bf:31:f1
inet 192.168.1.2 netmask 0xffffff00 broadcast 192.168.1.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
inet 127.0.0.1 netmask 0xff000000
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1492
options=80000<LINKSTATE>
inet 84.201.232.226 --> 84.201.225.100 netmask 0xffffffff
Opened by PID 822
tun9: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
options=80000<LINKSTATE>
inet 10.8.0.1 --> 10.8.0.2 netmask 0xffffffff
Opened by PID 1345
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1396
inet 192.168.0.2 --> 192.168.0.60 netmask 0xffffffff



Помогите пожалуйста решить эту дилемму.
Спасибо.

VoxVeritas
19-10-2015, 10:57
В общем, такая ситуация. Все работает)
Перевел на tap интерфейс openvpn.

Но вот что выяснил:
Работает, работает, а потом примерно через 3-4 дня openvpn коннектится, но по RDP не пускает (в общем локалки снова нету)

Перезагружаю сервак - и все снова работает. И снова через 3-4 дня не работает.

ДУмал, что память что-то жрет. Перезапускал и выключал полностью apache22, mysql, squid (они жрали неплохо). Но это не помогло.
Только полный ребут.

Всего на серваке 2Gb RAM. Понимаю, что мало, но я не подумал, что так будет она расходываться.
По команде top в основном жрут apache22, mysql, squid

Вот у меня к вам вопрос:
Как можно выяснить, из-за чего не пускается пакеты через openvpn ?




© OSzone.net 2001-2012