Re: Подробное руководство по ipfw nat
Добавлено: 2011-09-01 23:41:06
Занести в таблицу диапазон IP — можно только маской, без вариантотв?
У русских простые принципы в жизни: голодного - накормить, замерзшего - согреть, утопающего - спасти, охуевшего - отпиздить
https://forum.lissyara.su/
Не то чтобы мне удалось решить это только что, но поступил вопрос в личку, решил отписаться. На случай если будет интересно кому-то:никак не получается сотворить следующее.
имеется: локальная сеть - шлюз - инет
на шлюзе проброс портов через redirect_port tcp 10.0.0.200:80 out_ip:80
не получается сделать так чтобы клиенты из локальной сети при вводе в браузере out_ip попадали на 10.0.0.200, чего к сожалению не происходит.
+ порт 7777 и еще некоторые не web
честно говоря что-то пока не могу придумать как сделать.
там же на шлюзе стоит squid и статистика пользователей на 10.0.0.1:80
Код: Выделить всё
${FwCMD} nat 123 config ip ${IpOut} redirect_port tcp 10.0.0.15:3389 ${IpOut}:3389
${FwCMD} add nat 123 ip from any to ${IpOut} 3389
${FwCMD} add nat 123 tcp from 10.0.0.15 3389 to any
${FwCMD} nat 10 config ip ${IpOut} same_ports
${FwCMD} add nat 10 all from 10.0.0.0/24 to 10.0.0.15
Благодарю за оперативный ответ. Правильно ли я понял, что в таком случае придется создавать по дополнительному экземпляру nat для каждого redirect (port/addr)?bwdude писал(а):Удалось решить
Код: Выделить всё
uname -a
FreeBSD serv.example.com 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Thu Mar 31 22:52:39 MSD 2011 adm@serv.example.com:/usr/obj/usr/src/sys/kern64 amd64
Код: Выделить всё
cat /usr/src/sys/amd64/conf/kern64
...
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=50
options IPFIREWALL_FORWARD
options IPDIVERT
options IPFIREWALL_NAT
options LIBALIAS
options ROUTETABLES=2
options DUMMYNET
options HZ="1000"
...
Код: Выделить всё
cat /etc/sysctl.conf
net.inet.ip.fw.one_pass=0
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
net.inet.ip.fastforwarding=1
net.inet.tcp.maxtcptw=40960
net.inet.icmp.drop_redirect=1
net.inet.icmp.maskrepl=0
net.inet.icmp.icmplim=100
kern.ipc.nmbjumbop=192000
kern.ipc.nmbclusters=229376
kern.ipc.maxsockets=204800
net.inet.tcp.maxtcptw=163840
kern.maxfiles=204800
kern.ipc.somaxconn=4096
net.inet.ip.intr_queue_maxlen=4096
net.inet.tcp.drop_synfin=1
net.inet.tcp.nolocaltimewait=1
net.inet.ip.portrange.randomized=0
Код: Выделить всё
cat /etc/rc.conf
gateway_enable="YES"
ifconfig_igb0="inet 1.2.3.214 netmask 255.255.255.252 -rxcsum -txcsum -tso "
ifconfig_igb0_alias0="inet 1.2.4.2 netmask 255.255.255.248"
ifconfig_igb0_alias1="inet 1.2.5.149 netmask 255.255.255.240"
ifconfig_igb0_alias2="inet 1.2.5.151 netmask 255.255.255.240"
ifconfig_igb1="inet 192.168.0.1 netmask 255.255.255.0"
defaultrouter="1.2.3.213"
hostname="serv.example.com"
firewall_enable="YES"
firewall_nat_enable="YES"
dummynet_enable="YES"
firewall_script="/etc/rc.ipfw"
Код: Выделить всё
cat /etc/rc.ipfw
#!/bin/sh
fw="/sbin/ipfw "
if_out="igb0"
ip_out="1.2.3.214"
ip_out0="1.2.4.2"
ip_out1="1.2.5.149"
if_in="igb1"
ip_in="192.168.0.1"
admin="3.2.1.89"
client1="192.168.0.11"
rdrct1="1.2.5.151"
rdrct238="192.168.0.56"
$fw -f flush
$fw -f pipe flush
$fw -f queue flush
$fw add 100 allow ip from any to any via lo0
$fw add 200 deny ip from any to 127.0.0.0/8
$fw add 300 deny ip from 127.0.0.0/8 to any
$fw add 1040 allow ip from any to any via $if_in
$fw add 1041 allow tcp from $admin to $ip_out 22 in recv $if_out keep-state
$fw add 1050 deny ip from any to 192.168.0.0/16 in recv $if_out
$fw add 1060 deny ip from 192.168.0.0/16 to any in recv $if_out
$fw add 1070 deny ip from any to 172.16.0.0/12 in recv $if_out
$fw add 1080 deny ip from 172.16.0.0/12 to any in recv $if_out
$fw add 1090 deny ip from any to 10.0.0.0/8 in recv $if_out
$fw add 10100 deny ip from 10.0.0.0/8 to any in recv $if_out
$fw add 10110 deny ip from any to 169.254.0.0/16 in recv $if_out
$fw add 10120 deny ip from 169.254.0.0/16 to any in recv $if_out
$fw pipe 1 config bw 2Mbit/s queue 60 gred 0.002/10/30/0.1
$fw queue 1 config pipe 1 queue 60 mask src-ip 0xffffffff gred 0.002/10/30/0.1
$fw pipe 2 config bw 2Mbit/s queue 60 gred 0.002/10/30/0.1
$fw queue 2 config pipe 2 queue 60 mask dst-ip 0xffffffff gred 0.002/10/30/0.1
$fw nat 1 config log if $if_out reset same_ports deny_in redirect_port tcp $rdrct238:3389 3389
$fw nat 2 config log same_ports redirect_addr $client1 $rdrct1
$fw add 10230 skipto 10290 ip from $client1 to any out xmit $if_out
$fw add 10240 skipto 10310 ip from any to $rdrct1 in recv $if_out
$fw add 10250 queue 1 ip from any to any out xmit $if_out
$fw add 10260 nat 1 ip from any to any via $if_out
$fw add 10270 queue 2 ip from any to any in recv $if_out
$fw add 10280 allow all from any to any
$fw add 10290 queue 1 ip from any to any out xmit $if_out
$fw add 10300 nat 2 ip from $client1 to any out xmit $if_out
$fw add 10310 nat 2 ip from any to $rdrct1 in recv $if_out
$fw add 10320 queue 2 ip from any to any in recv $if_out
$fw add 10330 allow all from any to any
$fw add 65534 deny all from any to any
конфиг нгиникса выложьтеbwdude писал(а):Удалось решить http://forum.lissyara.su/viewtopic.php? ... 25#p189254
...
поставил на шлюзе nginx - он у меня слушает 80 порт и уже nginx распределяет кого куда. В зависимости какой адрес домена набрал, на такой сервер и отправляйся.
у меня сейчас просто на одном внешнем IP три доменных имени висят, которые три разных машины обслуживает, так вот nginx видит какое набрали доменное имя и уже проксирует (именно проксирует, а не маскарадинг или редирект) на нужную машину.
...
если вы говорите про правила nat, то нет. не обязательно. можно всё в одном правиле.miragh писал(а):Благодарю за оперативный ответ. Правильно ли я понял, что в таком случае придется создавать по дополнительному экземпляру nat для каждого redirect (port/addr)?bwdude писал(а):Удалось решить
выкладываю пару секций server из раздела http (остальное по аналогии):vadim64 писал(а):конфиг нгиникса выложьтеbwdude писал(а):Удалось решить http://forum.lissyara.su/viewtopic.php? ... 25#p189254
...
поставил на шлюзе nginx - он у меня слушает 80 порт и уже nginx распределяет кого куда. В зависимости какой адрес
...
мне будет очень приятно
Код: Выделить всё
server {
listen 1.2.3.4;
server_name corporate.example.com autoconfig.example.com;
location / {
proxy_pass http://192.168.1.7;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /webcam/ {
proxy_pass http://192.168.1.30/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
auth_basic "enter support password";
auth_basic_user_file ngpasswd;
}
server {
listen 1.2.3.4;
server_name webportal.example.com;
location / {
proxy_pass http://192.168.1.9/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 3600;
}
}
server {
listen 1.2.3.4;
server_name help.example.com;
location / {
proxy_pass http://192.168.1.7/wiki/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /wiki/ {
proxy_pass http://192.168.1.7/wiki/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 1.2.3.4;
server_name mail.example.com;
location / {
proxy_pass http://192.168.1.4/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
рдп делается через ipfwvadim64 писал(а):а где кусок про рдп?
не зажимаем! выкладываем!
давно себе такое хочу, лень доки читать и думать
С этого места можно поподробней (для меня было очевидно что решение с nginx касается исключительно http)? Есть понимание почему пакеты не идут к клиенту, а вот как сделать так чтоб проходили - пока не хватает знаний.bwdude писал(а):если вы говорите про правила nat, то нет. не обязательно. можно всё в одном правиле.
я использую разные когда мне нужно логически их разделить
ПК +1 в Вашу пользу.vadim64 писал(а):bwdude выше описал, как он решил этот вопрос
Код: Выделить всё
00300 3706180 4580006588 queue 2 ip from not 192.0.2.0/24 to 192.0.2.0/24 out
00400 2989370 975558073 queue 21 ip from 192.0.2.0/24 to not me in
00500 1250422 1172758479 queue 3 ip from not 192.0.172.0/29 to 192.0.172.0/29 out
00600 1094520 170108620 queue 31 ip from 192.0.172.0/29 to not me in
05000 14312 1295328 allow ip from any to any via lo0
05100 1125548 155012111 fwd 127.0.0.1,3128 tcp from 192.0.2.0/24 to not me dst-port 80 in recv vlan2
06000 1 56 deny ip from 192.168.0.0/16 to any in via bce0
06010 145 18952 deny ip from 172.16.0.0/12 to any in via bce0
06020 8 647 deny ip from 10.0.0.0/8 to any in via bce0
06030 0 0 deny ip from 127.0.0.0/8 to any in via bce0
06040 0 0 deny ip from 0.0.0.0/8 to any in via bce0
06050 0 0 deny ip from 169.254.0.0/16 to any in via bce0
06060 0 0 deny ip from 192.0.2.0/24 to any in via bce0
06070 0 0 deny ip from 204.152.64.0/23 to any in via bce0
06080 0 0 deny ip from 224.0.0.0/3 to any in via bce0
06100 0 0 deny ip from table(1) to any
06600 128 15063 deny ip from any to any frag in via bce0
06900 3 188 deny ip from 192.0.172.0/29 to 192.0.2.0/24 via vlan*
06930 0 0 deny ip from 192.0.2.0/24 to 192.0.172.0/29 via vlan*
08000 1248 261020 allow ip from any to any via gif0
08000 54553 19002412 allow esp from any to any
08000 0 0 allow ah from any to any
08000 1247 284460 allow ipencap from any to any
08000 946 212668 allow udp from any to me dst-port 500
08000 6728 501062 allow tcp from table(22) to me dst-port 22 in via bce0
08100 0 0 allow tcp from any to me dst-port 21 in via bce0
08110 1672 283264 allow tcp from any to any dst-port 50000-50100 in via bce0
08200 245 13543 allow tcp from any to me dst-port 80 in via bce0
08210 130 6776 allow tcp from any to me dst-port 443 in via bce0
08300 8 384 allow tcp from any to me dst-port 1723 in via bce0
08500 0 0 allow tcp from any to 192.0.2.110 dst-port 35300 in via bce0
09000 1606 78126 allow ip from 192.0.2.0/24 to me in recv vlan2
09010 442 114981 allow ip from me to 192.0.2.0/24 out xmit vlan2
09040 0 0 allow ip from 192.0.172.0/29 to me in recv vlan272
09050 0 0 allow ip from me to 192.0.172.0/29 out xmit vlan272
09100 1862056 818269566 allow ip from 192.0.2.0/24 to any in recv vlan2
09120 3693987 4561598260 allow ip from any to 192.0.2.0/24 out xmit vlan2
09130 207 51066 deny ip from any to any via vlan2
09170 1094359 169882309 allow ip from 192.0.172.2 to any in recv vlan272
09180 1248375 1170218355 allow ip from any to 192.0.172.2 out xmit vlan272
09190 0 0 deny ip from any to any via vlan272
09200 1094359 169882309 skipto 10300 ip from 192.0.172.2 to any out xmit bce0
09210 1250427 1172758922 skipto 10310 ip from any to 203.0.113.19 in recv bce0
10000 7762734 5763933566 nat 1 ip from any to any via bce0
10100 0 0 allow gre from any to any
10200 7715894 5759321780 allow ip from any to any
10300 1094359 169882309 nat 2 ip from 192.0.172.2 to any out xmit bce0
10310 1250427 1172758922 nat 2 ip from any to 203.0.113.19 in recv bce0
10400 2344782 1342640816 allow ip from any to any
65535 804 124991 deny ip from any to any
Код: Выделить всё
# ipfw nat show config
ipfw nat 2 config log same_ports redirect_addr 192.0.172.2 203.0.113.19
ipfw nat 1 config if bce0 log deny_in same_ports reset \
redirect_port tcp 192.0.2.110:35300 35300
Код: Выделить всё
$ ping -t4 203.0.113.19
PING 203.0.113.19 (203.0.113.19): 56 data bytes
64 bytes from 203.0.113.19: icmp_seq=0 ttl=249 time=4.836 ms
64 bytes from 203.0.113.19: icmp_seq=1 ttl=249 time=3.762 ms
64 bytes from 203.0.113.19: icmp_seq=2 ttl=249 time=4.532 ms
64 bytes from 203.0.113.19: icmp_seq=3 ttl=249 time=4.977 ms
--- 203.0.113.19 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 3.762/4.527/4.977/0.470 ms
Код: Выделить всё
#!/bin/sh
#Загрузим флаг из файла по умолчанию - 0
CUR_CHANNEL=`cat CUR_CHANNEL`
# ping хоста
png=`ping -c 1 -i 1 PING_HOST | grep % | awk '{ print $7 };'`
case $png
in
100%)
if [ "$CUR_CHANNEL" = "0" ] ; then
`echo 1 > FL_CHANNEL`
/usr/local/sbin/mpd4 --kill
/usr/local/sbin/mpd5 --file /etc/mpd4/mpd.reserv --background --pidfile /var/run/mpd.pid
/bin/sh pfctl -ef /etc/pf.isp_reserv
/bin/sh /etc/netstart
fi
break
0%)
if [ "$CUR_CHANNEL" = "1" ]; then
`echo 0 > FL_CHANNEL`
/usr/local/sbin/mpd4 --kill
/usr/local/sbin/mpd5 --file /etc/mpd4/mpd.normal --background --pidfile /var/run/mpd.pid
/bin/sh pfctl -ef /etc/pf.isp_normal
/bin/sh /etc/netstart
fi
break
;;
*)
break
;;
esac[code]