Страница 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

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

log icmp

Re: ipfw, kernel nat, icmp: подскажите как настроить

Добавлено: 2009-03-09 20:16:49
mnz_home
zingel писал(а):

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

log icmp
:oops: А куда именно это включать? :crazy:

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
Ну а что тут интересного можно увидеть? :smile: Все нужное рубится на НАТе (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. :no:

Re: ipfw, kernel nat, icmp: подскажите как настроить

Добавлено: 2009-04-06 10:29:35
mnz_work
Гость писал(а):Подумал тут... Похоже нельзя настроить как я хочу с deny_in в nat. :no:
Эх, хотел растравить местных гуру и все равно все молчат. :cry: Неужели правда нельзя? :smile:

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 :smile:

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
Спасибо большое,все работает. :good:

Re: ipfw, kernel nat, icmp: подскажите как настроить

Добавлено: 2013-04-05 10:35:15
Гость
mnz_work писал(а):
Гость писал(а):Подумал тут... Похоже нельзя настроить как я хочу с deny_in в nat. :no:

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

${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 для наглядности