Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программное обеспечение Linux и FreeBSD (http://forum.oszone.net/forumdisplay.php?f=11)
-   -   OpenVPN + IPFW Kernel NAT (http://forum.oszone.net/showthread.php?t=306345)

VoxVeritas 06-10-2015 23:38 2561313

OpenVPN + IPFW Kernel NAT
 
Здравствуйте коллеги.
Сам я не новичек в 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 2565554

В общем, такая ситуация. Все работает)
Перевел на tap интерфейс openvpn.

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

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

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

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

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


Время: 20:08.

Время: 20:08.
© OSzone.net 2001-