FreeBSD + OpenVPN + nat/fwd = проблема
Модератор: terminus
Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
FreeBSD + OpenVPN + nat/fwd = проблема
Всем доброго дня!
Не могу победить следующую проблему.
Интернет ->
роутер (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 порту.
Не могу победить следующую проблему.
Интернет ->
роутер (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
Тарифы на хостинг в России, от 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/
Тарифы на виртуальные сервера (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/
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
FreeBSD + OpenVPN + nat/fwd = проблема
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"
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
FreeBSD + OpenVPN + nat/fwd = проблема
ASC - sysctl.conf
Код: Выделить всё
#NAT
net.inet.ip.fw.one_pass=1
net.inet.ip.forwarding=1
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
FreeBSD + OpenVPN + nat/fwd = проблема
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
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
FreeBSD + OpenVPN + nat/fwd = проблема
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
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
FreeBSD + OpenVPN + nat/fwd = проблема
На ADM конфиги практически аналогичны, за исключением того что нет nat и пытался форвардить все пакеты через If_VPN, но ничего не получилось.
-
- прапорщик
- Сообщения: 493
- Зарегистрирован: 2015-05-25 14:36:32
FreeBSD + OpenVPN + nat/fwd = проблема
Если написанное:
Хотя думаю ТС имелось ввиду нечто подобное:Вроде не должно быть уж очень сильно мудреным.
На вскидку гляньте пост №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/
немного сократить, то получается:
Код: Выделить всё
Инт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/
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
FreeBSD + OpenVPN + nat/fwd = проблема
Немного не так. ADM не роутер.
Дело в том, что эта структура немного упрощенная: на самом деле к ASC через OpenVPN подключено много сетей.
Мне кажется дело в том, что ADM не знает куда отправить обратный пакет и принуждение его к этому ничего не дало.
Спасибо за ссылки. Но я уже везде был. Перепробовал тучу вариантов и осознанных и наугад. Ничего это не дало.
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
FreeBSD + OpenVPN + nat/fwd = проблема
Сейчас пакет идет так: Инет-роутер-ASC_внешний-ASC_Openvpn - ADM_OpenVPN. Ответ уходит через ADM_внешний и теряется.
Предыдущие варианты тоже ничего не дали.
Предыдущие варианты тоже ничего не дали.
-
- прапорщик
- Сообщения: 493
- Зарегистрирован: 2015-05-25 14:36:32
FreeBSD + OpenVPN + nat/fwd = проблема
Ок.
Значит сам ADM это nat с двумя (минимум) интерфейсами.
Но тогда это противоречит Вашему утверждению "На ADM конфиги практически аналогичны, за исключением того что нет nat".
Конкретно "нет nat".
В общем мне остается не понятным какое участие "в зоне сети ASC" имеет "ADM" и каким образом это сделано.
А далее все должно быть не сложно.
"Везде был" не значит все понял...
Нужно поймать/увидеть "что не так".
Из Ваших правил (и учитывая "На ADM конфиги практически аналогичны")
не вижу правила выходного пакета для ввв из ната или из "до" ната.
У Вас там написано правило:
Соответственно, считаю, что нечто подобное на обоих серверах.
Если я правильно помню 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 "как они есть" сейчас в системах.Конечно не забудьте подменить белые IP на что-то вида 1.1.1.1, 1.1.1.2 и т.д. (но не запутайтесь).
Значит сам 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 - номер сета правил
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
FreeBSD + OpenVPN + nat/fwd = проблема
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
Это уже не от того конфига - это все вычистил и начал с нуля.
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
FreeBSD + OpenVPN + nat/fwd = проблема
я думаю у меня каша в голове из-за смеси fwd/nat.
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
FreeBSD + OpenVPN + nat/fwd = проблема
Частично заработало.
Убрал все forward и поставил нат на второй интерфейс.
Почему-то в моем случае one_pass не играет роли включен или нет.
Убрал все forward и поставил нат на второй интерфейс.
Почему-то в моем случае one_pass не играет роли включен или нет.
-
- прапорщик
- Сообщения: 493
- Зарегистрирован: 2015-05-25 14:36:32
FreeBSD + OpenVPN + nat/fwd = проблема
1. Пострайтесь указывать о каком именно хосте идет речь.
Вангую, что о хосте ADM.
Если это так, то нат Вы на нем включаете...
Причем на внутреннем интерфейсе...
2. Какой интерфейс ADM смотрит в Интернет?
("1) сетевуха которая смотрит в локальную сеть")
3. Мы-же помним, что "Задача: заставить WWW-сервер обрабатывать запросы от обоих линий."
Т.е. не понимаю где она, "вторая" линия Интернет?
"2) интерфейс OpenVPN".
И при этом написано "ASC и ADM связаны между собой OpenVPN - сеть-сеть. ASC - сервер OpenVPN, ADM - клиент".
4. Если по-ванговать и просто вспомнить азы:
(А если нат есть, то правила просто пишутся до включения ната, т.е. до "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
Особенно на пример построения в самом низу.
Вангую, что о хосте 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 нат для доступа к сайту "из Интернет" через А не нужен вообще.
И в конфиге самого "некоего апача" прописывается 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
Особенно на пример построения в самом низу.
-
- рядовой
- Сообщения: 17
- Зарегистрирован: 2022-05-20 8:46:51
FreeBSD + OpenVPN + nat/fwd = проблема
РЕШЕНИЕ было такое:
В итоге пакеты ходят по OpenVPN c внешнего интерфейса по означенным портам и машинам
Demis, спасибо за участие.
Код: Выделить всё
#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}
Demis, спасибо за участие.