Страница 1 из 1
ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-03-09 12:26:40
mnz_home
Имеется примерно вот такая конфигурация ipfw с ядерным натом:
Код: Выделить всё
[...]
${FwCmd} add 4100 check-state
[...]
${FwCmd} nat 11 config if ${dml_inet_if} deny_in reset log \
redirect_port tcp ${computer_ip}:${dc_port} ${dc_port} \
redirect_port udp ${computer_ip}:${dc_port} ${dc_port} \
redirect_port tcp ${computer_ip}:${bt_port} ${bt_port} \
redirect_port udp ${computer_ip}:${bt_port} ${bt_port} \
redirect_port tcp ${noutbook_ip}:${dc_nb_port} ${dc_nb_port} \
redirect_port udp ${noutbook_ip}:${dc_nb_port} ${dc_nb_port}
#${FwCmd} add 8600 nat 11 ip4 from ${internal_net},${pptp_pool} to any via ${dml_inet_if} out
${FwCmd} add 8700 nat 11 ip4 from ${internal_net} to any via ${dml_inet_if} out
${FwCmd} add 8800 nat 11 ip4 from any to any via ${dml_inet_if} in
[...]
${FwCmd} add 9900 allow icmp from any to any icmptypes ${icmp_allowed} keep-state
${FwCmd} add 10000 deny log all from any to any
Все хорошо, все работает, но захотелось разрешить icmp из внешней сети. Сказано-сделано, добавляю правило:
Код: Выделить всё
${FwCmd} add 7660 allow icmp from any to me icmptypes ${icmp_allowed}
Гейт начинает пинговаться из интернета. Но перестают проходить icmp-пакеты из внутренней сети в интрнет (на tracert с компьютера за натом виден только первый хоп (гейт), потом звездочки). Как это дело можно поправить? По понятным причинам deny_in в конфигурации ната убирать очень не хочется.
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-03-09 14:23:02
zingel
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-03-09 20:16:49
mnz_home
А куда именно это включать?
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-03-10 0:58:55
zingel
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-04-03 19:45:36
mnz_home
Ну а что тут интересного можно увидеть?
Все нужное рубится на НАТе (deny_in)
Код: Выделить всё
Apr 3 19:38:58 mnz kernel: ipfw: 9900 Accept ICMP:0.0 213.180.204.8 10.178.152.3 out via xl1
Apr 3 19:38:58 mnz last message repeated 2 times
Apr 3 19:38:59 mnz kernel: ipfw: 9900 Accept ICMP:3.1 193.110.20.10 10.178.152.2 out via xl1
Apr 3 19:39:02 mnz kernel: ipfw: 9900 Accept ICMP:3.1 85.141.250.202 10.178.152.2 out via xl1
Apr 3 19:39:02 mnz kernel: ipfw: 9900 Accept ICMP:3.1 193.110.20.10 10.178.152.2 out via xl1
Apr 3 19:39:06 mnz kernel: ipfw: 9900 Accept ICMP:3.1 85.141.250.202 10.178.152.2 out via xl1
Apr 3 19:39:31 mnz last message repeated 3 times
Apr 3 19:39:31 mnz kernel: ipfw: limit 10 reached on entry 9900
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-04-04 14:03:40
Гость
Подумал тут... Похоже нельзя настроить как я хочу с deny_in в nat.
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-04-06 10:29:35
mnz_work
Гость писал(а):Подумал тут... Похоже нельзя настроить как я хочу с deny_in в nat.
Эх, хотел растравить местных гуру и все равно все молчат.
Неужели правда нельзя?
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-04-06 10:40:35
zingel
Код: Выделить всё
${FwCmd} add 9900 allow log icmp from any to any icmptypes ${icmp_allowed} keep-state
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-04-06 14:28:18
mnz_work
zingel писал(а):Код: Выделить всё
${FwCmd} add 9900 allow log icmp from any to any icmptypes ${icmp_allowed} keep-state
Так и сделано (только в правиле keep-state таки убрал), вот же лог -
http://forum.lissyara.su/viewtopic.php? ... 16#p155820
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-04-07 16:55:35
mnz_home
Ну что, ребят, никто не пользуется kernel nat'ом?
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-04-10 18:00:27
CrazyPilot
Ну, он не кернел, а ipfw nat. Могу привести конфиг. Тока у меня "идеология" совершенно другая. one_pass=0, nat без deny_in.
Аццкей конфиг:
Код: Выделить всё
#!/bin/sh
ipfw='/sbin/ipfw -q '
# Interfaces
# Interface to LAN
int0_if="vr0"
int0_ip="10.10.6.1/32"
# Interface to WAN
ext0_if="fxp0"
ext0_ip="xxx.xxx.xxx.xxx"
# OpenVPN interface (VPN)
vpn_if="tun0"
# Table names
tRFC1918="0"
tGateways="1"
# Special hosts
dc_rst="10.10.6.2/32"
gw_spb="yyy.yyy.yyy.yyy"
# This host have a VTB bank client
r0005="10.10.6.104/32"
# Network's definition
vpn_srv_net="10.10.20.0/24"
spb_net="10.10.1.0/24"
rst_net="10.10.6.0/24"
${ipfw} disable one_pass
${ipfw} nat 111 delete
${ipfw} flush
${ipfw} table $tRFC1918 flush # Private networks
${ipfw} table $tGateways flush # Our gateways
# Table "zero" - RFC 1918 private networks
${ipfw} table $tRFC1918 add 10.0.0.0/8
${ipfw} table $tRFC1918 add 172.16.0.0/12
${ipfw} table $tRFC1918 add 192.168.0.0/16
# MS autoconfigured network
${ipfw} table $tRFC1918 add 169.254.0.0/16
# Our gateways
${ipfw} table $tGateways add z.z.z.z # MSK
${ipfw} table $tGateways add h.h.h.h # WHMSK
${ipfw} table $tGateways add p.p.p.p # SPB severen
${ipfw} table $tGateways add r.r.r.r # SPB peterstar
${ipfw} table $tGateways add d.d.d.d # CHEL
# NAT Configuration
# NAT on interface em2
${ipfw} nat 111 config ip ${ext0_ip} log reset unreg_only
${ipfw} add 100 check-state
# Localhost
${ipfw} add 200 allow ip from any to any via lo0
# Divide the traffic from multiple interfaces and directions
# Traffic from local whmsk lan
${ipfw} add 310 skipto 1000 ip from any to any in recv ${int0_if}
# Traffic to local whmsk lan
${ipfw} add 320 skipto 4000 ip from any to any out xmit ${int0_if}
# Traffic from WAN to me
${ipfw} add 330 skipto 7000 ip from any to any in recv ${ext0_if}
# Traffic from me to WAN
${ipfw} add 340 skipto 10000 ip from any to any out xmit ${ext0_if}
# Traffic from vpn interface
${ipfw} add 350 skipto 13000 ip from any to any in recv ${vpn_if}
# Traffic to vpn interface
${ipfw} add 360 skipto 16000 ip from any to any out xmit ${vpn_if}
# Deny all another []-:
${ipfw} add 999 skipto 65000 ip from any to any
# ---------------------------------------------------------- #
# ---- Traffic from local rst network (in recv int0_if) ---- #
# ---------------------------------------------------------- #
# Allow traffic to LAN's
${ipfw} add 1000 allow ip from ${rst_net} to ${rst_net}
${ipfw} add allow ip from ${rst_net} to ${spb_net}
# ICMP to all
${ipfw} add allow icmp from ${rst_net} to any
# DNS from domain controller
${ipfw} add allow tcp from ${dc_rst} to any 53
${ipfw} add allow udp from ${dc_rst} to any 53
# VTB bank client on r0005
${ipfw} add allow tcp from ${r0005} to 195.151.17.7 25
${ipfw} add allow tcp from ${r0005} to 195.151.17.2 110
# Default rule for traffic from local rst network
${ipfw} add 3999 deny log logamount 10000 all from any to any
# ----------------------------------------------------------- #
# ---- Traffic to local rst network (out xmit int0_if) ---- #
# ----------------------------------------------------------- #
# Allow traffic from LAN's
${ipfw} add 4000 allow ip from ${rst_net} to ${rst_net}
${ipfw} add allow ip from ${spb_net} to ${rst_net}
# Traffic from internet (Need for natted traffic)
${ipfw} add allow tcp from any to ${rst_net}
${ipfw} add allow icmp from any to ${rst_net}
# Default rule for traffic from any to local spb network
${ipfw} add 6999 deny log logamount 10000 ip from any to any
# -------------------------------------------- #
# ---- Traffic from WAN (in recv ext0_if) ---- #
# -------------------------------------------- #
# Deny from RFC 1918 networks
${ipfw} add 7000 deny ip from table\($tRFC1918\) to ${ext0_ip}
# Pass all trafic to NAT instance. Not NAT traffic will leave from NAT without modification.
# NAT traffic will leave from NAT with LAN dst ip.
${ipfw} add nat 111 ip from any to ${ext0_ip}
# Traffic from NAT to local net.
${ipfw} add allow ip from any to ${rst_net}
# ICMP 0 - echo reply, 8 - echo request, 11 - TTL exceeded
${ipfw} add allow log logamount 10000 icmp from any to ${ext0_ip} icmptypes 0,8,11
# DNS
${ipfw} add allow udp from any 53 to ${ext0_ip}
${ipfw} add allow tcp from any 53 to ${ext0_ip}
# SSH
${ipfw} add allow tcp from table\($tGateways\) to ${ext0_ip} 5222 keep-state
# Default rule for traffic from WAN (in recv ext0_if)
${ipfw} add 9999 deny log logamount 10000 ip from any to any
# ------------------------------------------- #
# ---- Traffic to WAN (out xmit ext0_if) ---- #
# ------------------------------------------- #
# DNS
${ipfw} add 10000 allow udp from ${ext0_ip} to any 53
${ipfw} add allow tcp from ${ext0_ip} to any 53
# OpenVPN2
${ipfw} add allow udp from ${ext0_ip} to ${gw_spb} 1194 keep-state
# ICMP
${ipfw} add allow icmp from ${ext0_ip} to any
# All from my ip
${ipfw} add allow ip from ${ext0_ip} to any keep-state
#### NAT ####
# DNS
${ipfw} add nat 111 tcp from ${dc_rst} to any 53
${ipfw} add nat 111 udp from ${dc_rst} to any 53
# ICMP
${ipfw} add nat 111 icmp from ${rst_net} to any
# VTB Bank client
${ipfw} add nat 111 tcp from ${r0005} to 195.151.17.7 25
${ipfw} add nat 111 tcp from ${r0005} to 195.151.17.2 110
# Allow traffic after NAT processing (one_pass == 0) (no keep-state!)
${ipfw} add allow tcp from ${ext0_ip} to any
${ipfw} add allow icmp from ${ext0_ip} to any
# Default rule for traffic to internet (out xmit ext0_if)
${ipfw} add 12999 deny log logamount 10000 ip from any to any
# ----------------------------------------- #
# ---- Traffic from vpn (in recv tun0) ---- #
# ----------------------------------------- #
${ipfw} add 13000 allow ip from ${spb_net} to ${rst_net}
${ipfw} add allow ip from ${spb_net} to ${vpn_srv_net}
${ipfw} add allow ip from ${vpn_srv_net} to ${vpn_srv_net}
${ipfw} add allow ip from ${vpn_srv_net} to ${rst_net}
# Defaul rule for traffic from affiliates through vpn
${ipfw} add 15999 deny ip from any to any
# ---------------------------------------- #
# ---- Traffic to vpn (out xmit tun0) ---- #
# ---------------------------------------- #
# Traffic to spb through vpn
${ipfw} add 16000 allow ip from ${rst_net} to ${spb_net}
${ipfw} add allow ip from ${rst_net} to ${vpn_srv_net}
${ipfw} add allow ip from ${vpn_srv_net} to ${vpn_srv_net}
${ipfw} add allow ip from ${vpn_srv_net} to ${spb_net}
# Defaul rule for traffic to affiliates through vpn
${ipfw} add 18999 deny log logamount 10000 ip from any to any
# Deny all by default
${ipfw} add 65000 deny log logamount 10000 ip from any to any
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-05-05 12:32:22
denmariupol
День добрый.3-й день пытаюсь настроить ядерный нат.
Ядро пересобрано с опциями
Код: Выделить всё
options NETGRAPH # NETGRAPH..
options NETGRAPH_IPFW # ng_ipfw
options LIBALIAS # ng_nat
options NETGRAPH_NAT # ng_nat
options NETGRAPH_NETFLOW # ng_netflow...
Код: Выделить всё
### MPD ###
options NETGRAPH_SPLIT
options NETGRAPH_KSOCKET
options NETGRAPH_SOCKET
options NETGRAPH_BPF
options NETGRAPH_IFACE
options NETGRAPH_MPPC_ENCRYPTION
options NETGRAPH_PPP
options NETGRAPH_PPTPGRE
options NETGRAPH_TCPMSS
options NETGRAPH_VJC
options NETGRAPH_TEE
options NETGRAPH_CAR
### --- ###
options IPFIREWALL #
options IPFIREWALL_NAT
options IPFIREWALL_VERBOSE #
options IPFIREWALL_VERBOSE_LIMIT=10
options IPFIREWALL_FORWARD #
options IPFIREWALL_DEFAULT_TO_ACCEPT #
options DUMMYNET
#============
cat /etc/sysctl.conf
Код: Выделить всё
net.inet.ip.forwarding=1
net.inet.ip.fw.enable=1
Код: Выделить всё
[root@den /usr/src/sys/i386/conf]# dmesg |grep ipfw
ipfw2 initialized, divert loadable, rule-based forwarding enabled, default to accept, logging limited to 10 packets/entry by default
Код: Выделить всё
[root@den /usr/src/sys/i386/conf]# kldstat
Id Refs Address Size Name
1 7 0xc0400000 4dc6f8 kernel
2 1 0xc08dd000 6a32c acpi.ko
3 1 0xc1c68000 4000 ng_ether.ko
4 1 0xc1c6c000 5000 ng_pppoe.ko
Насколько я понял нат,не загружен.Что можете в этом случае посоветовать?Благодарю за помощь.
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-05-05 12:37:33
paradox
конечно не загружен
он у вас вкомпилен уже в ядро
ipfw2 initialized, divert loadable, rule-based forwarding enabled, default to accept, logging limited to 10 packets/entry by default
а что вы еще хотите от него?
зы
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-05-05 13:01:57
denmariupol
Прошу простить,всего еще не уяснил.
Вот правила,с ними нат не работает,что не правильно сделал?
И еще, скрипт,вытягивающий ip ,считывается только 1 раз при загрузке правил,если он меняется,то "все пропало".Что можно сделать в этом случае?
Код: Выделить всё
#!/bin/bash
fwcmd="/sbin/ipfw -q"
IF_local="rl1" #локальная сеть
IP_local="10.10.10.1"
NET_local="10.10.10.0/24"
IF_inet="rl0" # интерфейс смотрит в модем
IP_inet="192.168.1.2"
NET_inet="192.168.1.0/24"
IF_pppoe= '/sbin/ifconfig ng0 |grep inet | head -n 1 |awk {'print $2'}' # внешний адрес с динамическим ip
${fwcmd} -f flush
${fwcmd} add check-state
#lo0
${fwcmd} add allow ip from any to any via lo0
${fwcmd} add deny ip from any to 127.0.0.0/8
${fwcmd} add deny ip from 127.0.0.0/8 to any
##### NAT #####
${fwcmd} nat 1 config ip ${IF_pppoe}
${fwcmd} add 10 nat 123 ip from ${NET_local} to any
${fwcmd} add 20 nat 123 ip from any to ${IF_pppoe}
Код: Выделить всё
[root@den /usr/src/sys/i386/conf]# ifconfig
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8<VLAN_MTU>
ether 00:a0:d2:13:2a:75
inet 192.168.1.2 netmask 0xffffff00 broadcast 192.168.1.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
rl1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8<VLAN_MTU>
ether 00:06:4f:79:a9:db
inet 10.10.10.1 netmask 0xffffff00 broadcast 10.10.10.255
media: Ethernet autoselect (none)
status: no carrier
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
inet 127.0.0.1 netmask 0xff000000
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1492
inet 92.112.143.56 --> 195.5.5.200 netmask 0xffffffff
Благодарю.
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-05-05 13:03:51
paradox
тот скрипт должен юзаться в mpd когда интерфейс поднимаеться
а вы его как юзаете?
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-05-05 13:09:29
denmariupol
Скрипт в конфиге правил /etc/ipfw.conf см.пост выше.
Можно подробнее про mpd?
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-05-05 13:11:56
paradox
он не там должен быть судя по его содержанию
а в конфиге mpd.conf
в up-script
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-05-06 20:51:26
mnz_home
denmariupol писал(а):И еще, скрипт,вытягивающий ip ,считывается только 1 раз при загрузке правил,если он меняется,то "все пропало".Что можно сделать в этом случае?
Код: Выделить всё
${fwcmd} nat 1 config ip ${IF_pppoe}
${fwcmd} add 10 nat 123 ip from ${NET_local} to any
${fwcmd} add 20 nat 123 ip from any to ${IF_pppoe}
А чем не нравится вот такой вариант (вместо ip указывать интерфейс)? удобен как раз для динамических ip.
Код: Выделить всё
wan_inet_if="ng0"
...
# NAT internet
${FwCmd} nat 11 config if ${wan_inet_if} deny_in reset log
${FwCmd} add 7600 nat 11 ip4 from ${int_net},${vpn_net} to any via ${wan_inet_if} out
${FwCmd} add 7700 nat 11 ip4 from any to me via ${wan_inet_if} in
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2009-05-13 14:58:49
denmariupol
Спасибо большое,все работает.
Re: ipfw, kernel nat, icmp: подскажите как настроить
Добавлено: 2013-04-05 10:35:15
Гость
mnz_work писал(а):Гость писал(а):Подумал тут... Похоже нельзя настроить как я хочу с deny_in в nat.
Код: Выделить всё
${FwCMD} add 10239 skipto 60000 icmp from any to any
...........
${FwCMD} add 60000 deny log logamount 500 icmp from any to any frag
${FwCMD} add 60010 deny log logamount 500 icmp from any to 255.255.255.255 in via ${LanOut}
${FwCMD} add 60020 deny log logamount 500 icmp from any to 255.255.255.255 out via ${LanOut}
${FwCMD} add 60020 queue 3 icmp from any to any out xmit ${LanOut}
${FwCMD} add 60030 queue 4 icmp from any to any in recv ${LanOut}
${FwCMD} add 60100 skipto 60900 icmp from ${NetIn}/${NetMask} to any in recv ${LanIn}.
${FwCMD} add 60110 skipto 60800 icmp from ${NetIn}/${NetMask} to any out xmit ${LanOut}
${FwCMD} add 60120 skipto 60700 icmp from any to me in via ${LanOut}
${FwCMD} add 60130 skipto 60600 icmp from any to ${NetIn}/${NetMask} out xmit ${LanIn}
${FwCMD} add 60114 allow icmp from any to me icmptypes 8 in recv ${LanOut} keep-state
${FwCMD} add 60115 allow icmp from me to any out xmit ${LanOut} keep-state
${FwCMD} add 60370 skipto 61000 icmp from any to any
${FwCMD} add 60600 allow icmp from any to ${NetIn}/${NetMask} out xmit ${LanIn}
${FwCMD} add 60699 skipto 61000 icmp from any to any
${FwCMD} add 60700 nat 333 log logamount 500 icmp from any to me in recv ${LanOut}
${FwCMD} add 60710 allow icmp from any to ${NetIn}/${NetMask} in recv ${LanOut}
${FwCMD} add 60720 allow icmp from any to me in recv ${LanOut}
${FwCMD} add 60799 skipto 61000 icmp from any to any
${FwCMD} add 60800 nat 333 log logamount 500 icmp from ${NetIn}/${NetMask} to any out xmit ${LanOut}
${FwCMD} add 60897 allow icmp from me to any out xmit ${LanOut}.
${FwCMD} add 60899 skipto 61000 icmp from any to any
${FwCMD} add 60900 allow icmp from ${NetIn}/${NetMask} to any in recv ${LanIn}.
${FwCMD} add 61000 deny log logamount 1000 icmp from any to any
${FwCMD} nat 333 config ip ${IpOut} log reset same_ports deny_in one_pass=0
нельзя, но если очень хочется - то можна
skipto для наглядности