>Привет всем!
>хочу в линуксе сделать NAT, при условии что tcp-пакеты имеют в качестве
>порта назначаения, например 110. При всех других случаях НАТ делать не
>надо.
>Тривиальная задача и в ipfw/PF я делал подобное много раз. В линуксе -----# firehol explain
: firehol.sh,v 1.256 2007/05/22 22:52:53 ktsaou Exp $
(C) Copyright 2003, Costa Tsaousis <costa@tsaousis.gr>
FireHOL is distributed under GPL.
Home Page: http://firehol.sourceforge.net
# FireHOL [:] > FROM="10.0.0.0/24"
# Cmd Line : 1
# Command : FROM="10.0.0.0/24"
# > OK <
# FireHOL [:] > MYEXT="192.168.0.32"
# Cmd Line : 2
# Command : MYEXT="192.168.0.32"
# > OK <
# FireHOL [:] > DST="1.1.1.0/24"
# Cmd Line : 3
# Command : DST="1.1.1.0/24"
# > OK <
# FireHOL [:] > snat to "$MYEXT" proto tcp src "$FROM" dst "$DST" dport "110"
# Cmd Line : 4
# Command : snat to "$MYEXT" proto tcp src "$FROM" dst "$DST" dport "110"
# Creating chain 'nat.1' under 'POSTROUTING' in table 'nat'
/sbin/iptables -t nat -N nat.1
/sbin/iptables -t nat -A POSTROUTING -p tcp -s 10.0.0.0/24 -d 1.1.1.0/24 --dport 110 -j nat.1
# Taking the NAT action: 'snat'
/sbin/iptables -t nat -A nat.1 -p tcp -j SNAT --to-source 192.168.0.32
# > OK <
# FireHOL [:] > router mailpass src "$FROM" dst "$DST" dport "110"
# Cmd Line : 5
# Command : router mailpass src "$FROM" dst "$DST" dport "110"
# Creating chain 'in_mailpass' under 'FORWARD' in table 'filter'
/sbin/iptables -t filter -N in_mailpass
/sbin/iptables -t filter -A FORWARD -s 10.0.0.0/24 -d 1.1.1.0/24 --dport 110 -j in_mailpass
# Creating chain 'out_mailpass' under 'FORWARD' in table 'filter'
/sbin/iptables -t filter -N out_mailpass
/sbin/iptables -t filter -A FORWARD -s 1.1.1.0/24 --sport 110 -d 10.0.0.0/24 -j out_mailpass
# > OK <
# FireHOL [router:mailpass] > server "pop3" accept
# Cmd Line : 6
# Command : server "pop3" accept
# Preparing for service 'pop3' of type 'server' under interface 'mailpass'
# Creating chain 'in_mailpass_pop3_s1' under 'in_mailpass' in table 'filter'
/sbin/iptables -t filter -N in_mailpass_pop3_s1
/sbin/iptables -t filter -A in_mailpass -j in_mailpass_pop3_s1
# Creating chain 'out_mailpass_pop3_s1' under 'out_mailpass' in table 'filter'
/sbin/iptables -t filter -N out_mailpass_pop3_s1
/sbin/iptables -t filter -A out_mailpass -j out_mailpass_pop3_s1
# Running simple rules for server 'pop3'
/sbin/iptables -t filter -A in_mailpass_pop3_s1 -p tcp --sport 1024:65535 --dport 110 -m state --state NEW\,ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A out_mailpass_pop3_s1 -p tcp --sport 110 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
# > OK <
# FireHOL [router:mailpass] > quit
version 5
FROM="10.0.0.0/24"
MYEXT="192.168.0.32"
DST="1.1.1.0/24"
snat to "$MYEXT" proto tcp src "$FROM" dst "$DST" dport "110"
router mailpass src "$FROM" dst "$DST" dport "110"
server "pop3" accept
-----# _
Да, не маскарад. Мне просто со SNAT-ом привычнее.
Да, три команды, получившиеся из "snat to ..." можно склеить в одну. Мне лениво.
Да, "router ..." + "accept pop3" тоже нужны: не всё ж пускать...
И, да, ещё ip_forward надо включить -- в firehol debug он бы был, но... %)
Успехов в решении тривиальных задач! ;)