Iptables+ip_route+CONNMARK+MARK
Задача... есть два канала один по трафику, друго безлим, безлим дешовый но медленный, через него пустим весь нет пусть все кто что хоят то и делают в нете такая вот политика партии.
Вторая задача отпускать в нет по быстрому каналу только несколько сайтов тоесть либо несколько подсетей либо несколько хостов. это будет указанно в переменной $ip_adr
Уже обгуглился мановобкурился, раскажите где я накосячил...
Начинаю пинговать сайт который указал в $ip_adr а он не пингуется и ответов вообще от него нет..
хотя с роутреа на нужной нам сетевушке все прекрасно снимается
с клиента
ping nnm.ru
И тишина в ответ...
c роутера
tcpdump -i eth2 icmp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth2, link-type EN10MB (Ethernet), capture size 96 bytes 14:31:41.432554 IP 10.0.0.77 > volkh.nnm.netserv.name: ICMP echo request, id 20069, seq 2369, length 64 14:31:41.434885 IP volkh.nnm.netserv.name > 10.0.0.77: ICMP echo reply, id 20069, seq 2369, length 64 ^C 2 packets captured 2 packets received by filter 0 packets dropped by kernel
переменная $ip_adr
cat adr 93.91.224.0/24 93.91.224.2 93.91.224.3 89.111.189.147 89.111.189.148 89.111.189.149 88.212.197.198
Код скрипта айпитаблес
#!/bin/bash # ipt=/sbin/iptables # Clear Iptables $ipt -F $ipt -t nat -F $ipt -t mangle -F # Acept input output traffic $ipt -P INPUT ACCEPT $ipt -P OUTPUT ACCEPT $ipt -P FORWARD ACCEPT $ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $ipt -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT for ip_adr in `cat ./adr` do $ipt -t mangle -A PREROUTING -s 192.168.0.0/24 -d $ip_adr -j MARK --set-mark 1 $ipt -t mangle -A PREROUTING -s 192.168.0.0/24 -d $ip_adr -j CONNMARK --save-mark done # $ipt -t mangle -A OUTPUT -s 192.168.0.0/24 -j CONNMARK --restore-mark # dublicat $ipt -t mangle -A OUTPUT -j CONNMARK --restore-mark # $ipt -A FORWARD -i eth1 -o eth0 -m connmark --mark 1 -j ACCEPT $ipt -A FORWARD -i eth1 -o eth2 -j ACCEPT $ipt -t nat -A POSTROUTING -m connmark --mark 1 -j MASQUERADE $ipt -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
в переменной $ip_adr подставляются адреса хостов которые должны ходить по второму каналу...
код скрипта для роута.
#/bin/bash ip route flush table norm ip route add 10.0.0.0/24 dev eth2 src 10.0.0.77 table norm ip rule add fwmark 1 table norm ip route add default via 10.0.0.200 dev eth2 table norm ip route flush cacherouter iptables #
route говорит
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.0.0 * 255.255.255.0 U 0 0 0 eth2 192.168.0.0 * 255.255.255.0 U 0 0 0 eth1 83.222.220.0 * 255.255.255.0 U 0 0 0 eth0 default D1-MCH-gi0-2.80 0.0.0.0 UG 0 0 0 eth0 default 10.0.0.200 0.0.0.0 UG 1 0 0 eth2
Плиз айнид ХЕЛП...
- Для комментирования войдите или зарегистрируйтесь
зачем тут MARK? все это же
зачем тут MARK? все это же леается iproute2 tables(две таблицы, каждая со своим шлюзом). А в iptables два правила на NAT (правда с маскарадом я это не делал), форвардам не надо указывать исходящий интерфейс. (все что не разрешено то запрещено)
Чем это может делаться это
Чем это может делаться это понятно, просто марком можно помечать и отправлять разные пакеты снимать с портов и так далее...
по средствам route этого делать нельзя?!
Характер скверный, не женат!