Господа, бьюсь уже 3-юю неделю.
Суть проблемы:
есть предприятие, к которому нужно коннектиться по VPN+RDP.
схема:
Интернет -> FreeBSD 10.2 (Шлюз, Sendmail) -> LAN предприятия -> Win2k3 (PPTP+DHCP+RDP)
На данный момент стоит фря 8.2, на ней, вышеуказанная схема, работает через IPFW.Стала задача поставить новый/более "мощный" в смысле конфигурации сервер, на который накатил FreeBSD 10.2, поднял всё необходимое, за исключением возможности подключения к LAN из вне.
Первую неделю воевал с IPFW+NAT - тишина.
########################################################
rc.conf
########################################################
#Внешний интерфейс
ifconfig_re0="inet 10.10.13.196 netmask 255.255.255.0"
#Локальный интерфейс
ifconfig_rl0="inet 192.168.1.110 netmask 255.255.255.0"
firewall_logif="YES"
defaultrouter="10.10.13.1"
sshd_enable="YES"firewall_enable="YES"
firewall_nat_enable="YES"
firewall_script="/etc/ipfw.rules"
firewall_type="Open"
firewall_quiet="YES"
firewall_logging="NO"natd_program="/sbin/natd"
natd_enable="YES"
natd_interface="re0"
natd_flags="-s -m -u -f /etc/natd.conf"
########################################################
########################################################
ipfw.rules
########################################################
#!/bin/shfwcmd="/sbin/ipfw"
outer_ip="10.10.13.196"
inner_ip="192.168.1.110"
inner_net="192.168.1.0/24"
nat_port="8668"
$fwcmd -f flush# divert natd all via external iface
$fwcmd add 6 divert 8668 ip from any to any via re0
$fwcmd add 7 allow tcp from any to 10.10.13.196 3389 via any
$fwcmd add 7 deny tcp from any to any 3389 via re0# loopback
$fwcmd add 8 allow tcp from any 1723 to any
$fwcmd add 8 allow gre from any to any
$fwcmd add 8 allow tcp from any to any 1723# checkstate
$fwcmd add 1010 check-state# skippers
$fwcmd add 1020 skipto 2000 all from any to any via re0
$fwcmd add 1030 skipto 3000 all from any to any via rl0# re0 - divert incoming
$fwcmd add 2110 skipto 2900 all from any to $outer_ip in via re0
$fwcmd add 2150 allow tcp from any to $inner_net established in via re0$fwcmd add 2152 allow udp from any 53 to $inner_net in via re0
$fwcmd add 2155 allow tcp from any 53 to $inner_net in via re0
$fwcmd add 2156 allow udp from any 42 to $inner_net in via re0# re0 - divert outgoing
$fwcmd add 2200 skipto 2900 all from $outer_ip to any out via re0
$fwcmd add 2250 allow tcp from $outer_ip to any out via re0 established
$fwcmd add 2251 allow tcp from $outer_ip to any out via re0 setup# re0 - local
$fwcmd add 2900 allow tcp from $outer_ip to any established via re0
$fwcmd add 2901 allow tcp from any to $outer_ip established via re0
$fwcmd add 2902 allow tcp from $outer_ip to any via re0 setup
$fwcmd add 2910 allow udp from $outer_ip to any out via re0 keep-state
$fwcmd add 2920 allow icmp from any to any via re0
# FORWARD ALL TO OUR PROXY
$fwcmd add 3490 skipto 3510 tcp from any to any in via rl0
$fwcmd add 3500 fwd 127.0.0.1,3128 tcp from $inner_net to any 80,81 in via rl0
$fwcmd add 3510 allow all from any to any via rl0
########################################################
########################################################
natd.conf
########################################################
redirect_proto gre 192.168.1.10
redirect_port tcp 192.168.1.10:1723 1723
redirect_port tcp 10.10.13.196:25 2525
########################################################
########################################################
--------------------------------------------------------
Вторую неделю боролся с PF
########################################################rc.conf
########################################################
#Внешний интерфейс
ifconfig_re0="inet 10.10.13.196 netmask 255.255.255.0"
#Локальный интерфейс
ifconfig_rl0="inet 192.168.1.110 netmask 255.255.255.0"
firewall_logif="YES"
defaultrouter="10.10.13.1"
sshd_enable="YES"pf_enable="YES"
pf_rules="/etc/pf.conf"
########################################################
########################################################
pf.conf
########################################################
ext_if="re0"
int_if="rl0"
lan="192.168.1.0/24"
ext_ip="10.10.13.196"
tcp_services="{ 22, 25, 80, 110, 443, 8080, 10000, 1723, 9090, 5222, 5223, 7777, 7443, 7070, 1194, 3389 }"
udp_services="{ 53, 514 }"
table <blacklist> persist file "/etc/blacklist.ip"
set skip on lo0
set loginterface $ext_if
set block-policy return
scrub in all
nat on $ext_if from !($ext_if) -> ($ext_if:0)nat on $ext_if inet proto tcp from $lan to any port $tcp_services -> $ext_if
nat on $ext_if inet proto udp from $lan to any port $udp_services -> $ext_if
nat on $ext_if inet proto icmp from $lan to any -> $ext_ifrdr on $ext_if proto tcp from any to any port 3389 -> 192.168.1.10
rdr on $ext_if proto tcp from any to any port 1723 -> 192.168.1.10
rdr on $ext_if proto gre -> 192.168.1.10no nat on $ext_if proto gre all
no nat on $ext_if proto tcp from any to any port = 1723
no nat on $ext_if proto tcp from any port = 1723 to anypass quick on $ext_if inet proto tcp from any to any port 1723
pass quick on $ext_if inet proto tcp from any port 1723 to any
pass quick inet proto gre to any keep state
pass proto 47 all keep statepass in on $ext_if proto tcp from any to $ext_if port $tcp_services flags S/SA keep state
pass in on $ext_if proto tcp from any to $ext_if port $udp_services keep state
pass out on $ext_if proto tcp all modulate state flags S/SA
pass out on $ext_if proto {tcp, udp, icmp } all keep statepass on $int_if all
########################################################Реакции тоже ни какой - нет подключения и хоть ты кол на голове чеши, но фря не пробрасывает в сеть PPTP соединение.
Помогите разобраться.
> pass quick inet proto gre to any keep statepass quick on $ext_if inet proto gre from any to any
смотрели вообще какие правила попадают в ipfw или в pf?
> pass quick on $ext_if inet proto gre from any to any
> смотрели вообще какие правила попадают в ipfw или в pf?так я тоже ставил - реакции никакой
через tcpdump -ni re0 tcp port 1723 or proto gre
вижу что идёт подключение по 1723, но толку 0
видимо gre не проваливается куда надосейчас собираю ядро с device gre, попробую снова.
>> pass quick on $ext_if inet proto gre from any to any
>> смотрели вообще какие правила попадают в ipfw или в pf?
> так я тоже ставил - реакции никакой
> через tcpdump -ni re0 tcp port 1723 or proto gre
> вижу что идёт подключение по 1723, но толку 0
> видимо gre не проваливается куда надо
> сейчас собираю ядро с device gre, попробую снова.раньше и давным давно помнится pf не мог работать с GRE трафиком и требовался изврат с frickin pptp proxy(который давно помер в портах). текущее дело с pf не могу сказать точно и проверить, как бы PPTP давно как не айс :D :)
ipfw вроде как должен справляться так имеется в наличии есть alias_pptp. убери лишние правила на время проверки и микс разных натов
глянь так же:
http://startext.tomsk.ru/node/125
http://shurik.kiev.ua/blog/index.php?/archives/9-FreeBSD_i_G...
http://it-e.ru/blogs/administrirovanie/probros-trafika-pptp-...
> раньше и давным давно помнится pf не мог работать с GRE трафиком
> и требовался изврат с frickin pptp proxy(который давно помер в портах).
> текущее дело с pf не могу сказать точно и проверить, как
> бы PPTP давно как не айс :D :)про pptp знаю... сейчас это нужно на некоторое время, потом буду OpenVPN поднимать либо IPsec.
> ipfw вроде как должен справляться так имеется в наличии есть alias_pptp. убери
> лишние правила на время проверки и микс разных натовДа, сам уже думал об этом. Алиас подгружен.
Появилась мысль, что сам w2k3 не пропускает. Завтра попробую ещё с ним по колдовать.
Пока спасибо.
> глянь так же:
> http://startext.tomsk.ru/node/125
> http://shurik.kiev.ua/blog/index.php?/archives/9-FreeBSD_i_G...
> http://it-e.ru/blogs/administrirovanie/probros-trafika-pptp-...К сожалению ни один из вариантов не сработал (
tpc 1723 передаётся, а вот gre ни в какую не хочет.
Пока ничего не помогло (
Пробовал переписывать правила по различным примерам, но результат всё тот же=0> смотрели вообще какие правила попадают в ipfw или в pf?
Подскажите, как это сделать.
> Пока ничего не помогло (
> Пробовал переписывать правила по различным примерам, но результат всё тот же=0
>> смотрели вообще какие правила попадают в ipfw или в pf?
> Подскажите, как это сделать.В случае ipfw, нафиг вы одновременно ядерный включили нат и в виде демона? Если проходит pptp, т.е. организована VPN, то зачем пробрасывать rdp, действующие правила смотреть через ipfw -a list
> В случае ipfw, нафиг вы одновременно ядерный включили нат и в виде демона?Вы имеете в виду это?:
natd_program="/sbin/natd"
natd_enable="YES"
natd_interface="re0"
natd_flags="-s -m -u -f /etc/natd.conf"Без него не могу достучаться до сервера по 22, да и в мир он перестаёт пропускать, т.к. является ещё и шлюзом.
> Если проходит pptp, т.е. организована VPN, то зачем пробрасывать rdp
с этим понятно, затупил, 3389 пройдёт по 1723
Ядро собрано с опциями:
#####################################
options LIBALIAS
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_NAT
options IPDIVERT
options DUMMYNET
options MROUTINGdevice pf
device pflog
device pfsync
#####################################Если в rc.conf оставлять только PF, то всё кроме pptp работает
--------------------------------------------
вот что пишет tcpdump на внешний re0
15:46:32.952291 IP 37.204.151.153.3593 > 10.10.13.196.1723: Flags [S], seq 3970020241, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
15:46:35.954124 IP 37.204.151.153.3593 > 10.10.13.196.1723: Flags [S], seq 3970020241, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
15:46:41.953933 IP 37.204.151.153.3593 > 10.10.13.196.1723: Flags [S], seq 3970020241, win 8192, options [mss 1460,nop,nop,sackOK], length 0и на внутренний
15:48:45.389871 IP 192.168.1.28.51623 > 192.168.1.110.1723: Flags [S], seq 1813963124, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
15:48:45.389931 IP 192.168.1.110.1723 > 192.168.1.28.51623: Flags [R.], seq 0, ack 1813963125, win 0, length 0
15:48:45.891848 IP 192.168.1.28.51623 > 192.168.1.110.1723: Flags [S], seq 1813963124, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
15:48:45.891906 IP 192.168.1.110.1723 > 192.168.1.28.51623: Flags [R.], seq 0, ack 1, win 0, length 0
15:48:46.391829 IP 192.168.1.28.51623 > 192.168.1.110.1723: Flags [S], seq 1813963124, win 8192, options [mss 1460,nop,nop,sackOK], length 0
15:48:46.391884 IP 192.168.1.110.1723 > 192.168.1.28.51623: Flags [R.], seq 0, ack 1, win 0, length 0при попытке подключения по pptp с удалённого ip на внешний, показывает, что сам порт 1723 пробрасывается, но соединения с VPN сервером на Win2k3 нет((
15:57:22.900963 IP 37.204.151.153.5636 > 192.168.1.10.1723: Flags [S], seq 550181637, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
15:57:25.896837 IP 37.204.151.153.5636 > 192.168.1.10.1723: Flags [S], seq 550181637, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
15:57:31.901522 IP 37.204.151.153.5636 > 192.168.1.10.1723: Flags [S], seq 550181637, win 8192, options [mss 1460,nop,nop,sackOK], length 0
>[оверквотинг удален]
> 0, length 0
> при попытке подключения по pptp с удалённого ip на внешний, показывает, что
> сам порт 1723 пробрасывается, но соединения с VPN сервером на Win2k3
> нет((
> 15:57:22.900963 IP 37.204.151.153.5636 > 192.168.1.10.1723: Flags [S], seq 550181637,
> win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
> 15:57:25.896837 IP 37.204.151.153.5636 > 192.168.1.10.1723: Flags [S], seq 550181637,
> win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
> 15:57:31.901522 IP 37.204.151.153.5636 > 192.168.1.10.1723: Flags [S], seq 550181637,
> win 8192, options [mss 1460,nop,nop,sackOK], length 0Странные люди... Насобирают солянки из natd, kernel nat, pf, pptp на винде и спрашивают почему не работает....
1. Убрать все виды фаирволов и натов, оставить нативный ipfw+kernel nat.
2. Убрать pptp с винды поднять pptp на фре с помощью mpd.Профит...
По первому вопросу всё просто:
# наша сеть которую нужно выпустить в интернет
table 2 add 172.16.0.0/21# внутренние ресурсы которые нету смысла выпускать сквозь nat
table 9 add 8.8.8.8
table 9 add 8.8.8.9
table 9 add 8.8.8.10#следующие три строчки собственно и есть nat =)
nat 1 config log if em1 reset same_ports
add 1200 nat 1 ip from table\(2\) to not table\(9\) via em1
add 1300 nat 1 ip from any to 8.8.8.8 via em1
>[оверквотинг удален]
> 0, length 0
> при попытке подключения по pptp с удалённого ip на внешний, показывает, что
> сам порт 1723 пробрасывается, но соединения с VPN сервером на Win2k3
> нет((
> 15:57:22.900963 IP 37.204.151.153.5636 > 192.168.1.10.1723: Flags [S], seq 550181637,
> win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
> 15:57:25.896837 IP 37.204.151.153.5636 > 192.168.1.10.1723: Flags [S], seq 550181637,
> win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
> 15:57:31.901522 IP 37.204.151.153.5636 > 192.168.1.10.1723: Flags [S], seq 550181637,
> win 8192, options [mss 1460,nop,nop,sackOK], length 0Провайдер точно пропускает?
> Провайдер точно пропускает?Да, пускает. Грешу на w2k3. Но найти там разрешение, либо запрет на конкретный хост или IP пока не смог.
>> Провайдер точно пропускает?
> Да, пускает. Грешу на w2k3. Но найти там разрешение, либо запрет на
> конкретный хост или IP пока не смог.А подключаться по vpn к шлюзу не хочешь?
А через впн тебе и rdp к w2003 пожалуйста
> А подключаться по vpn к шлюзу не хочешь?
> А через впн тебе и rdp к w2003 пожалуйстаПланирую так сделать, но это только после НГ, в виду независящих от меня причин.
А в данный момент необходим именно проброс 1723 и GRE.
В настоящее время через шлюз проходит 1723 до внутреннего интерфейса, а GRE молчит.
Если же из локалки через шлюз нырять наружу, то и 1723 и GRE проходят без проблем.Сейчас перерыл кучу всякого, на предмет проброса pptp и gre, но результат всё тот же.
К сожалению инфы по FreeBSD 10.2 крайне мало.
> firewall_nat_enable="YES"
> firewall_script="/etc/ipfw.rules"
> firewall_type="Open"где раздел Open в скрипте?
> natd_program="/sbin/natd"
> natd_enable="YES"Это к чему если ранее включен firewall_nat_enable="YES"
>[оверквотинг удален]
> $fwcmd add 3510 allow all from any to any via rl0
> ########################################################
> ########################################################
> natd.conf
> ########################################################
> redirect_proto gre 192.168.1.10
> redirect_port tcp 192.168.1.10:1723 1723
> redirect_port tcp 10.10.13.196:25 2525
> ########################################################
> ########################################################
И эти люди еще говорят, что ipfw более удобный и логичный, чем iptables :)На CentOS достаточно загрузить следующие модули - nf_nat_pptp, nf_conntrack_pptp, nf_nat_proto_gre nf_conntrack_proto_gre
>[оверквотинг удален]
> flags S/SA keep state
> pass in on $ext_if proto tcp from any to $ext_if port $udp_services
> keep state
> pass out on $ext_if proto tcp all modulate state flags S/SA
> pass out on $ext_if proto {tcp, udp, icmp } all keep state
> pass on $int_if all
> ########################################################
> Реакции тоже ни какой - нет подключения и хоть ты кол на
> голове чеши, но фря не пробрасывает в сеть PPTP соединение.
> Помогите разобраться.У меня вся GRE IPFW+NAT связка работала так, нужно сделать второй нат
NAT VPN Out
${fwcmd} nat 10 config if ${eint}
${fwcmd} add nat 10 gre from any to any
${fwcmd} add nat 10 tcp from ${ipv} to any dst-port pptp,1396,53,21
${fwcmd} add nat 10 tcp from any pptp,1396,53,21 to any
где {ipv} список ip разрешённых для работы с внешним vpn сервером.
natd не нужен, для работы по 22 порту достаточно
# rulezz for sshit table
${fwcmd} add deny tcp from table\(0\) to me dst-port 22
по ssh забыл нужно после запрещающих правил на которых ставится бан, естественно добавить
# SSH for localhost allow
${fwcmd} add allow tcp from any to me 22