FreeBSD + OpenVPN + nat/fwd = проблема

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 9:06:21

Всем доброго дня!
Не могу победить следующую проблему.

Интернет ->
роутер (x.x.x.x/192.168.1.1) ->
сервер ASC {FreeBSD12+ipfw/nat/fwd (192.168.1.12|If_Inet) + сервер OpenVPN (192.168.101.1|If_VPN)} ->
сервер ADM {клиент OpenVPN (192.168.101.6|If_VPN) + FreeBSD12 www-сервер (Ip_WWW)} ->
Интернет2

Задача: заставить WWW-сервер обрабатывать запросы от обоих линий.
Такое чувство, что он неправильно отсылает запросы обратно.

Уже неделю бьюсь - искурил все что можно. результата нет.
Пробую для примера на 40083 порту.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 9:08:50

ASC - rc.conf

Код: Выделить всё

ifconfig_re0="inet 192.168.1.12 netmask 255.255.255.0"
defaultrouter="192.168.1.1"

#IPFW
firewall_enable="YES"
firewall_quiet="YES"
firewall_type="workstation"
firewall_allowservices="any"
firewall_logdeny="YES"
firewall_script="/etc/ipfw.rules"
firewall_logging="YES"
firewall_nat_interface="tun0"
gateway_enable="YES"
firewall_nat_enable="YES"
dummynet_enable="YES"

#OpenVPN
openvpn_enable="YES"
openvpn_flags="--tls-server"
openvpn_if="tun"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"

DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 9:09:44

ASC - sysctl.conf

Код: Выделить всё

#NAT
net.inet.ip.fw.one_pass=1
net.inet.ip.forwarding=1

DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 9:12:53

ASC - ipfw.rules (был изначально)

Код: Выделить всё

#!/bin/sh

FwCMD="/sbin/ipfw -q"	# Path to ipfw
If_Inet="re0"           # Interface Internet
If_Local="re0"          # Interface LocalNet
If_VPN="tun0"		# Interface VPN
Ip_Inet="192.168.1.12"	# IP Internet
Ip_Local="192.168.1.12"	# IP LocalNet
Mask_Inet="24"		# Mask Internet
Mask_Local="24"		# Mask LocalNet
Net_Local="192.168.1.0"	# Net LocalNet
Net_VPN="192.168.101.0/24"	# Net LocalNet

P_VPN="1194"

${FwCMD} -f flush # Clear all rules -f=no prompting, -q
${FwCMD} add check-state # Check for dynamic rules

#LOOP
${FwCMD} add allow ip from any to any via lo0 #all traffic to loop
${FwCMD} add deny ip from any to 127.0.0.0/8  #deny traffic to loop
${FwCMD} add deny ip from 127.0.0.0/8 to any  #deny traffic from loop

#OpenVPN
${FwCMD} add allow all from any to any via ${If_VPN}
${FwCMD} add allow udp from any to me ${P_VPN}
${FwCMD} add allow udp from me ${P_VPN} to any

#NAT
${FwCMD} nat 1 config ip ${Ip_Inet}
${FwCMD} add nat 1 ip from ${Net_VPN} to any
${FwCMD} add nat 1 ip from any to ${Ip_Inet}

# deny localpacket to Interface Internet
${FwCMD} add deny ip from any to 10.0.0.0/8 in via ${If_Inet}
${FwCMD} add deny ip from 10.0.0.0/8 to any out via ${If_Inet}

${FwCMD} add deny ip from any to 172.16.0.0/12 in via ${If_Inet}
${FwCMD} add deny ip from 172.16.0.0/12 to any out via ${If_Inet}

${FwCMD} add deny ip from any to 0.0.0.0/8 in via ${If_Inet}
${FwCMD} add deny ip from 0.0.0.0/8 to any out via ${If_Inet}

${FwCMD} add deny ip from any to 169.254.0.0/16 in via ${If_Inet}
${FwCMD} add deny ip from 169.254.0.0/16 to any out via ${If_Inet}

#Multicast
${FwCMD} add deny ip from any to 224.0.0.0/4 in via ${If_Inet}
${FwCMD} add deny ip from 224.0.0.0/4 to any out via ${If_Inet}
${FwCMD} add deny ip from any to 240.0.0.0/4 in via ${If_Inet}
${FwCMD} add deny ip from 240.0.0.0/4 to any out via ${If_Inet}

#ICMP
${FwCMD} add deny icmp from any to any frag
${FwCMD} add deny icmp from any to 255.255.255.255 in via ${If_Inet}
${FwCMD} add deny icmp from any to 255.255.255.255 out via ${If_Inet}
${FwCMD} add allow icmp from any to any icmptypes 0,8,11 #ICMP echo in|out lifeend

#
${FwCMD} add allow tcp from any to any established #Established connections
${FwCMD} add allow ip from ${Ip_Inet} to any out xmit ${If_Inet}

#UDP Inet
${FwCMD} add allow udp from any 53 to any via ${If_Inet} #DNS
${FwCMD} add allow udp from any to any 53 via ${If_Inet} #DNS-Server
${FwCMD} add allow udp from any to any 123 via ${If_Inet} #Time Syncro

#TCP Inet
${FwCMD} add deny tcp from any to ${Ip_Inet} 21 via ${If_Inet} #FTP
${FwCMD} add allow tcp from any to ${Ip_Inet} 22 via ${If_Inet}  #SSH
${FwCMD} add allow tcp from any to ${Ip_Inet} 25 via ${If_Inet}  #SMTP-Server
${FwCMD} add allow tcp from any to ${Ip_Inet} 80 via ${If_Inet}  #WWW-Server
${FwCMD} add allow tcp from any to ${Ip_Inet} 110 via ${If_Inet} #POP
${FwCMD} add allow tcp from any to ${Ip_Inet} 143 via ${If_Inet} #IMAP
${FwCMD} add allow tcp from any to ${Ip_Inet} 443 via ${If_Inet} #SSL
${FwCMD} add allow tcp from any to ${Ip_Inet} 40082 via ${If_Inet} #WEBMIN
${FwCMD} add allow tcp from any to ${Ip_Inet} 40083 via ${If_Inet} #APACHE

#Local traffic
${FwCMD} add allow ip from any to any via ${If_Local} #Local All
${FwCMD} add allow gre from any to any via ${If_Local} #Local GRE
${FwCMD} add allow tcp from any to any via ${If_Local} #Local TCP
${FwCMD} add allow udp from any to any via ${If_Local} #Local UDP
${FwCMD} add allow icmp from any to any via ${If_Local} #Local ICMP

#ALL
${FwCMD} add 65534 allow all from any to any #ALLOW ALL


DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 9:18:21

ASC - ipfw.rules (сократил максимально чтобы разобраться с проблемой)

Код: Выделить всё

#!/bin/sh

FwCMD="/sbin/ipfw -q"	# Path to ipfw
If_Inet="re0"           # Interface Internet
If_Local="re0"          # Interface LocalNet
If_VPN="tun0"		# Interface VPN
Ip_Inet="192.168.1.12"	# IP Internet
Ip_Local="192.168.1.12"	# IP LocalNet
Mask_Inet="24"		# Mask Internet
Mask_Local="24"		# Mask LocalNet
Net_Local="192.168.1.0"	# Net LocalNet
Net_VPN="192.168.101.0/24"	# Net LocalNet
Ip_WWW="y.y.y.y"	# IP WWW Server

P_VPN="1194"

${FwCMD} -f flush # Clear all rules -f=no prompting, -q
${FwCMD} add check-state # Check for dynamic rules

#LOOP
${FwCMD} add allow ip from any to any via lo0 #all traffic to loop
${FwCMD} add deny ip from any to 127.0.0.0/8  #deny traffic to loop
${FwCMD} add deny ip from 127.0.0.0/8 to any  #deny traffic from loop

${FwCMD} add fwd 192.168.101.6,40083 tcp from me to any 40083 keep-state

${FwCMD} add nat 123 ip from any to any via ${If_Inet}

#OpenVPN
${FwCMD} add allow all from any to any via ${If_VPN}
${FwCMD} add allow udp from any to me ${P_VPN}
${FwCMD} add allow udp from me ${P_VPN} to any

${FwCMD} add allow tcp from any to any established #Established connections

#NAT
#${FwCMD} nat 1 config ip ${Ip_Inet} \
${FwCMD} nat 123 config if ${If_Inet} reset same_ports \
redirect_port tcp ${Ip_WWW}:40083 40083
#redirect_port tcp 192.168.101.6:40083 40083

#${FwCMD} nat 123 config if ${If_Inet} reset same_ports deny_in \
#redirect_port tcp 192.168.101.6:80 80
#redirect_port tcp 192.168.101.6:443 443
#${FwCMD} add nat 123 ip from any to any

#${FwCMD} add nat 123 ip from any to any via ${If_VPN}

#ALL
${FwCMD} add 65534 allow all from any to any #ALLOW ALL


DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 9:21:19

На ADM конфиги практически аналогичны, за исключением того что нет nat и пытался форвардить все пакеты через If_VPN, но ничего не получилось.

Demis
прапорщик
Сообщения: 486
Зарегистрирован: 2015-05-25 14:36:32

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение Demis » 2022-05-20 11:34:26

Если написанное:
DrAngel писал(а):
2022-05-20 9:06:21
Интернет ->
роутер (x.x.x.x/192.168.1.1) ->
сервер ASC {FreeBSD12+ipfw/nat/fwd (192.168.1.12|If_Inet) + сервер OpenVPN (192.168.101.1|If_VPN)} ->
сервер ADM {клиент OpenVPN (192.168.101.6|If_VPN) + FreeBSD12 www-сервер (Ip_WWW)} ->
Интернет2
немного сократить, то получается:

Код: Выделить всё

Инт1 -> роутер -> сервер ASC -> сервер ADM -> Инт2
Хотя думаю ТС имелось ввиду нечто подобное:

Код: Выделить всё

Инт1 -> роутер -> сервер ASC -> сервер ADM (www)
Инт2 -> сервер ADM (www) (сам ADM также является роутером)
Вроде не должно быть уж очень сильно мудреным.
На вскидку гляньте пост №7 по ссылке https://www.opennet.ru/openforum/vsluhf ... 78382.html
Еще из полезного:
http://ipfw.ism.kiev.ua/pbr.html
https://www.lissyara.su/articles/freebs ... /pbr+ipfw/
https://www.lissyara.su/articles/freebs ... d_routing/

DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 11:42:35

Demis писал(а):
2022-05-20 11:34:26
Инт2 -> сервер ADM (www) (сам ADM также является роутером)
Немного не так. ADM не роутер.
Demis писал(а):
2022-05-20 11:34:26
немного сократить, то получается:
Дело в том, что эта структура немного упрощенная: на самом деле к ASC через OpenVPN подключено много сетей.
Мне кажется дело в том, что ADM не знает куда отправить обратный пакет и принуждение его к этому ничего не дало.

Спасибо за ссылки. Но я уже везде был. Перепробовал тучу вариантов и осознанных и наугад. Ничего это не дало.

DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 11:45:45

Сейчас пакет идет так: Инет-роутер-ASC_внешний-ASC_Openvpn - ADM_OpenVPN. Ответ уходит через ADM_внешний и теряется.
Предыдущие варианты тоже ничего не дали.

Demis
прапорщик
Сообщения: 486
Зарегистрирован: 2015-05-25 14:36:32

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение Demis » 2022-05-20 14:06:17

Ок.
Значит сам ADM это nat с двумя (минимум) интерфейсами.
Но тогда это противоречит Вашему утверждению "На ADM конфиги практически аналогичны, за исключением того что нет nat".
Конкретно "нет nat".
В общем мне остается не понятным какое участие "в зоне сети ASC" имеет "ADM" и каким образом это сделано.

А далее все должно быть не сложно.
"Везде был" не значит все понял...

Нужно поймать/увидеть "что не так".

Из Ваших правил (и учитывая "На ADM конфиги практически аналогичны")
не вижу правила выходного пакета для ввв из ната или из "до" ната.

У Вас там написано правило:

Код: Выделить всё

${FwCMD} add fwd 192.168.101.6,40083 tcp from me to any 40083 keep-state
Соответственно, считаю, что нечто подобное на обоих серверах.

Если я правильно помню keep-state хорошо применять в схеме "изнутри сети->наружу", но не наоборот.
Когда у нас www это всегда наоборот...
Соответственно проще написать прямые правила, без автоматики и соблюдая нужную нумерацию.

Потом, почему "192.168.101.6,40083" , а не "192.168.101.6:40083" или "192.168.101.6 40083" ???
Запятая это обычно перечисление (192.168.101.6,192.168.101.7,192.168.101.8 или 40083,40084,40085).

Конечно было-бы интереснее взглянуть на счетчики (т.е. пока без tcpdump) и номера правил ipfw "как они есть" сейчас в системах.

Код: Выделить всё

ipfw -detiS show
где
d - динамические правила
e - протухшие динамические правила
t - время срабатывания правила
i - табличные правила
S - номер сета правил
Конечно не забудьте подменить белые IP на что-то вида 1.1.1.1, 1.1.1.2 и т.д. (но не запутайтесь).

DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 14:14:20

Demis писал(а):
2022-05-20 14:06:17
В общем мне остается не понятным какое участие "в зоне сети ASC" имеет "ADM" и каким образом это сделано.
ASC и ADM связаны между собой OpenVPN - сеть-сеть. ASC - сервер OpenVPN, ADM - клиент

DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 14:17:32

Demis писал(а):
2022-05-20 14:06:17
Значит сам ADM это nat с двумя (минимум) интерфейсами.
я имел в виду что в конфиге ipwf настроек nat не существует.
И ADM и ASC имеют два интерфейса:
1) сетевуха которая смотрит в локальную сеть и через роутер ходит в инет
2) интерфейс OpenVPN

DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 14:18:39

Demis писал(а):
2022-05-20 14:06:17
А далее все должно быть не сложно.
"Везде был" не значит все понял...
Однозначно. Не могу до конца уловить как ходит пакет и где ошибка.

DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 14:19:38

Demis писал(а):
2022-05-20 14:06:17
Если я правильно помню keep-state хорошо применять в схеме "изнутри сети->наружу", но не наоборот.
сейчас заново все правила переписываю, keep-state убрал уже - не помогло

DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 14:22:53

Demis писал(а):
2022-05-20 14:06:17
ipfw -detiS show
00100 0 0 set 0 check-state :default
00200 20664 10470757 Fri May 20 14:20:07 2022 set 0 reass ip from any to any in
00300 152 22544 Fri May 20 14:19:37 2022 set 0 allow ip from any to any via lo0
00400 34873 28338366 Fri May 20 14:20:07 2022 set 0 nat 1 ip from any to any via re0
00500 34873 28338366 Fri May 20 14:20:07 2022 set 0 allow ip from any to any via re0
00600 10768 8306320 Fri May 20 14:20:07 2022 set 0 allow ip from any to any via tun0
65534 0 0 set 0 allow ip from any to any
65535 5 792 Fri May 20 14:07:55 2022 set 31 deny ip from any to any


Это уже не от того конфига - это все вычистил и начал с нуля.

DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 14:24:19

Demis писал(а):
2022-05-20 14:06:17
У Вас там написано правило:
КОД: ВЫДЕЛИТЬ ВСЁ

${FwCMD} add fwd 192.168.101.6,40083 tcp from me to any 40083 keep-state
Соответственно, считаю, что нечто подобное на обоих серверах.
было форвард на обоих серверах - но не помогло.

DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 14:54:17

я думаю у меня каша в голове из-за смеси fwd/nat.

DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-20 15:05:32

Частично заработало.
Убрал все forward и поставил нат на второй интерфейс.
Почему-то в моем случае one_pass не играет роли включен или нет.

Demis
прапорщик
Сообщения: 486
Зарегистрирован: 2015-05-25 14:36:32

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение Demis » 2022-05-20 15:21:14

1. Пострайтесь указывать о каком именно хосте идет речь.
Вангую, что о хосте ADM.

Если это так, то нат Вы на нем включаете...

Код: Выделить всё

set 0 nat 1 ip from any to any via re0
Причем на внутреннем интерфейсе...

2. Какой интерфейс ADM смотрит в Интернет?
("1) сетевуха которая смотрит в локальную сеть")

3. Мы-же помним, что "Задача: заставить WWW-сервер обрабатывать запросы от обоих линий."
Т.е. не понимаю где она, "вторая" линия Интернет?
"2) интерфейс OpenVPN".
И при этом написано "ASC и ADM связаны между собой OpenVPN - сеть-сеть. ASC - сервер OpenVPN, ADM - клиент".

4. Если по-ванговать и просто вспомнить азы:

Код: Выделить всё

Некий хост1 имеет два интерфейса А и Б.
А - Интернет (белый IP).
Б - Внутрянка (серый IP).
Веб сервер, в самом простом случае (т.е. нет nginx, не в виртуалке, не в джайле и т.п., а просто некий апач), 
тогда на хосте1 нат для доступа к сайту "из Интернет" через А не нужен вообще.
(А если нат есть, то правила просто пишутся до включения ната, т.е. до "set 0 nat 1 ip from any to any via re0")
И в конфиге самого "некоего апача" прописывается IP от интерфейса А.
(поэтому "Частично заработало.")

5. Правило "65535 5 792 Fri May 20 14:07:55 2022 set 31 deny ip from any to any" говорит нам, что по умолчанию все запрещено.
Более того, видим, что туда 5 пакетов таки прилетело.
Значит эти пакеты небыли обработаны ни одним правилом.

Обратите внимание на пост:
https://www.opennet.ru/openforum/vsluhf ... /5591.html

Особенно на пример построения в самом низу.

DrAngel
рядовой
Сообщения: 17
Зарегистрирован: 2022-05-20 8:46:51

FreeBSD + OpenVPN + nat/fwd = проблема

Непрочитанное сообщение DrAngel » 2022-05-23 9:04:37

РЕШЕНИЕ было такое:

Код: Выделить всё

#NAT
${FwCMD} nat 2 config if ${If_VPN} same_ports reset
${FwCMD} add nat 2 ip from any to any via ${If_VPN}

${FwCMD} nat 1 config if ${If_Inet} same_ports unreg_only reset \
redirect_port tcp 10.x.x.x:40083 80 \
redirect_port tcp 10.x.x.y:40043 443
${FwCMD} add nat 1 ip from any to any via ${If_Inet}

В итоге пакеты ходят по OpenVPN c внешнего интерфейса по означенным портам и машинам

Demis, спасибо за участие.