LINUX.ORG.RU
ФорумAdmin

VPN туннель между двумя FreeBSD


0

0

Приветствую уважаемых ЛОРовцев!

Возникла проблема. Есть две FreeBSD машины, имеющие белые IP и по две сетевые карты. Задача - связать их VPN-туннелем. Решил сделать это посредством виртуального интерфейса gif0. Вот что получилось на первой машине:

Cray# ifconfig
bfe0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        ether 00:0c:6e:0b:1d:e6
        inet 81.9.48.222 netmask 0xfffffffc broadcast 81.9.48.223
        media: Ethernet autoselect (10baseT/UTP)
        status: active
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=2009<RXCSUM,VLAN_MTU,WOL_MAGIC>
        ether 00:02:b3:bc:1d:11
        inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=3<RXCSUM,TXCSUM>
        inet 127.0.0.1 netmask 0xff000000
pfsync0: flags=0<> metric 0 mtu 1460
        syncpeer: 224.0.0.240 maxupd: 128
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33200
gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1280
        tunnel inet 81.9.48.222 --> 77.108.65.233
        inet 192.168.0.1 --> 10.1.0.1 netmask 0xffffff00
        options=1<ACCEPT_REV_ETHIP_VER>
Cray# netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            81.9.48.221        UGS         0    14064   bfe0
10.1.0.0/24        192.168.0.1        US          0       33   fxp0
10.1.0.1           link#6             UH          0       57   gif0
81.9.48.220/30     link#1             U           0        0   bfe0
81.9.48.222        link#1             UHS         0        0    lo0
127.0.0.1          link#3             UH          0        0    lo0
192.168.0.0/24     link#2             U           0    15431   fxp0
192.168.0.1        link#6             UHS         0        0    lo0

А вот что вышло на второй:

gate# ifconfig
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        inet 77.108.65.233 netmask 0xfffffc00 broadcast 77.108.67.255
        ether 00:c0:26:aa:3c:90
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
rl1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        inet 10.1.0.1 netmask 0xffffff00 broadcast 10.1.0.255
        ether 00:0c:6e:5c:0f:91
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
pfsync0: flags=0<> mtu 2020
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet 127.0.0.1 netmask 0xff000000
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33208
gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280
        tunnel inet 77.108.65.233 --> 81.9.48.222
        inet 10.1.0.1 --> 192.168.0.1 netmask 0xffffff00
gate# netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            77.108.65.1        UGS         0      444    rl0
10.1/24            link#2             UC          0        0    rl1
10.1.0.1           00:0c:6e:5c:0f:91  UHLW        1      448    lo0
10.1.0.12          48:5b:39:1c:0e:b3  UHLW        0       45    rl1   1157
10.1.0.25          00:50:fd:ff:46:69  UHLW        0       53    rl1   1196
10.1.0.27          00:0f:24:7a:cd:1f  UHLW        0        8    rl1    690
10.1.0.110         00:01:a8:01:26:d0  UHLW        0      263    rl1    665
10.1.0.255         ff:ff:ff:ff:ff:ff  UHLWb       0        2    rl1
77.108.64/22       link#1             UC          0        0    rl0
77.108.65.1        00:1a:a9:15:29:c6  UHLW        1        0    rl0   1200
127.0.0.1          127.0.0.1          UH          0        0    lo0
192.168.0          10.1.0.1           UGS         0      448    rl1
192.168.0.1        10.1.0.1           UH          0       62   gif0

Теперь, собственно вопрос. Пинг с первой машины (Cray) на вторую (gate) идет без проблем, а вот пинг со второй на первую не идет. Причем, не идет странным образом - когда если ничего не передается с первой на вторую. То есть пингануть первую машину со второй можно только когда с первой машины пингуем вторую.

Замучался уже, если честно, поможите чем можите (с)!

Заранее спасибо за ответы.

Ответ на: комментарий от DALDON

А кроме файрвола никаких вариантов нет? Стоит PF, могу привести конфиг, но более чем уверен что трабла не в нем.

teamfighter
() автор топика
Ответ на: комментарий от teamfighter

Привожу конфиг pf.conf

# interfaces
ext_if = "bfe0"
int_if = "fxp0"
#vpn0_if = "ng0"
gif_if = "gif0"


# for users
tcp_services = "{ ssh, smtp, domain, 80, 8080, pop3, auth }"
udp_services = "{ domain, ntp }"

# for web services, ext
web_services = "{ 80, 21, 22, 1723 }"

# groups
int_net = "192.168.0.0/24"
bond_net = "10.1.0.0/24"
#adm_pcs = "{192.168.0.161, 192.168.0.221}"
vpn_pcs = "192.168.0.20/27"
table <users> {192.168.0.0/24, !192.168.0.221}
terminal = "192.168.0.9/32"
vpn_server = "192.168.0.9/32"
private_nets = "{ 192.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 169.254.0.0/16, 192.0.2.0/24, 0.0.0.0/8, 240.0.0.0/4 }"
dns = "{81.9.48.3/32 81.9.48.11/32}"
social_nets = "{vkontakte.ru, vk.com, odnoklassniki.ru}"

###################
# normalise
###################

set block-policy drop
set state-policy floating
set loginterface $ext_if
set limit { frags 100000, states 100000 }
set optimization normal
set skip on lo0
scrub in all

##################
# NAT & RDR
##################

nat on $int_if from $vpn_pcs to any -> ($int_if)
#nat on $int_if from $int_net to $vpn_pcs -> ($int_if)

nat on $ext_if inet from $int_net to any -> ($ext_if)

# MS terminal server
## rdr on $ext_if proto tcp from any to ($ext_if) port rdp -> $terminal

# Squid redirect
rdr on $int_if proto tcp from <users> to any port www -> 127.0.0.1 port 3129

# Pptp redirect
##rdr on $ext_if proto tcp from any to any port 1723 -> $vpn_server

#ftp redirect
rdr on $ext_if proto tcp from any to ($ext_if) port 22 -> 192.168.0.161 port 21
#rdr on $ext_if proto tcp from any to any  20 -> 192.168.0.161 port 20
#rdr on $int_if proto tcp from any to any port 21 -> 192.168.0.161 port 21
#rdr on $int_if proto tcp from any to any port 20 -> 192.168.0.161 port 20

#################
# rules
#################

#antispoof quick for { lo0, $int_if, $ext_if }
block all
#block drop in quick on $ext_if from $private_nets to any

# IPSEC
#pass in on $gif_if from any to any
#pass out on $gif_if from any to any

# Dns, icmp, ntp, www
pass inet proto icmp all
pass in on $int_if proto udp from $int_net to $dns port $udp_services
pass in on $int_if proto udp from $int_net to any
pass in on $ext_if proto tcp from any to ($ext_if) port $web_services

# option for 1723 (pptp, in "$web_services")
pass in on $ext_if proto gre from any to any

##pass out on $ext_if proto gre from any to any
##pass out on $int_if proto gre from any to any

# All out
#pass out on $int_if proto tcp from any to any
#pass out on $int_if proto udp from any to any
#pass out on $ext_if proto tcp from any to any
#pass out on $ext_if proto udp from any to any
pass out from any to any

# Users www
#pass in on $int_if proto tcp from $int_net to any port www
pass in on $int_if proto tcp from $int_net to any

# Torrents
pass in on $int_if proto udp from $int_net to any port 32768

pass in from any to $vpn_pcs
pass in from $vpn_pcs to any

pass in on $int_if proto gre from any to any

pass in on $gif_if from "10.1.0.0/24" to any
#pass in from any to any

# If squid redir is off
#block in on $int_if proto tcp from <users> to $social_nets
teamfighter
() автор топика
Ответ на: комментарий от anonymous

> делай на ipsec

Да, ipsec, если мне память не изменяет, это механизм определения ключа для шифрования и для последующего использования этого ключа для шифрования данных между двумя хостами. И используется оно для защиты соединения. Если вы мне скажете, как на механизме шифрования поднять VPN-туннель, я буду ооочень признателен))

teamfighter
() автор топика

>Задача - связать их VPN-туннелем.

Решил сделать это посредством виртуального интерфейса gif0


так в этом случае у тебя будет наверное не VPN а VN (без Private)? Может не будешь выпендриваться и поднимешь openvpn как все :)?

pupok ★★
()
Ответ на: комментарий от teamfighter

FAIL!! ipsec описывает и 2 транспортных протокола ESP AH и протокол обмены ключами isakmp

так что мой лопоухий дружок иди учи матчасть

anonymous
()
Ответ на: комментарий от pupok

так в этом случае у тебя будет наверное не VPN а VN (без Private)?

Сначала - VN, потом прикручу IPsec и будет VPN)

так что мой лопоухий дружок иди учи матчасть

Только тем и занимаюсь)

teamfighter
() автор топика
Ответ на: комментарий от teamfighter

isakmpd использует интерфейс enc0

anonymous
()
Ответ на: комментарий от teamfighter

Да вы что ??????

Filter rules specify the criteria that a packet must match and the resulting action, either block or pass, that is taken when a match is found. Filter rules are evaluated in sequential order, first to last. Unless the packet matches a rule containing the quick keyword, the packet will be evaluated against all filter rules before the final action is taken. The last rule to match is the «winner» and will dictate what action to take on the packet. There is an implicit pass all at the beginning of a filtering ruleset meaning that if a packet does not match any filter rule the resulting action will be pass.

http://www.openbsd.org/faq/pf/filter.html

guyvernk
()
Ответ на: комментарий от guyvernk

В PF в 99% случаев используется политика «запрещено все, что не разрешено».
А это означает что первое правило идет block all
И затем уже идут разрешающие правила.

guyvernk
()
Ответ на: комментарий от teamfighter

В комментариях вместо
#################
# rules
#################
укажи
#################
# filtering
#################
Делу это конечно не поможет, зато грамотнее смотреться будет)

antroX
()
Ответ на: комментарий от antroX

А если по делу - прекращай уже выпендриваться , поднимай openvpn.

antroX
()
Ответ на: комментарий от teamfighter

>Да, действительно. В самом конце. Проблема разрешилась, спасибо)
Вы поставили block all в самый конец и у вас все заработало?
Мо моему это должно заблокировать весь трафик, потому что в pf последнее правило решает
(за исключением quick правил, которые срабатывают сразу же вне зависимости от последующих установок)

antroX
()
Ответ на: комментарий от antroX

Конечно, нет. Просто в конце добавил разрешающие правила.

teamfighter
() автор топика

Что же вы все злые такие? человек спросил как решить конкретную проблему, а вы ему навязываете свое мнение и ОпенВПН. Существуют и другие пути для решения поставленной задачи но ведь захотел ВПН и решает проблему с ним, а не с чем нибудь другим. Кроме того, злые дядьки типа гуру или как вас еще назвать, вы никогда ни у кого ничего не спрашивали? а сами маны курили?

ИМХО

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.