* Routing the DNS Traffic via specific interface.
@ 2012-01-25 7:41 Netravali Ganesh
2012-01-25 8:41 ` Yann Lejeune
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Netravali Ganesh @ 2012-01-25 7:41 UTC (permalink / raw)
To: netfilter@vger.kernel.org
Hi ..
I have 2 interfaces eth0 and eth1 on the system connected to different subnets. I need to route all the outgoing DNS traffic of the system via eth1 interface. Pls let me know if below IPTABLES rules is proper way ?
Block the output DNS traffic on eth0 interface.
iptables -A FORWARD -p udp -o eth0 --dport 53 -j DROP
Forward output DNS traffic from eth1 interface
iptables -A FORWARD -p udp -o eth1 --dport 53 -j ACCEPT
Thanks
Ganesh
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: Routing the DNS Traffic via specific interface. 2012-01-25 7:41 Routing the DNS Traffic via specific interface Netravali Ganesh @ 2012-01-25 8:41 ` Yann Lejeune 2012-01-25 9:33 ` gapsf 2012-01-25 18:00 ` Rick Jones 2 siblings, 0 replies; 8+ messages in thread From: Yann Lejeune @ 2012-01-25 8:41 UTC (permalink / raw) To: Netravali Ganesh; +Cc: netfilter@vger.kernel.org On 25 January 2012 08:41, Netravali Ganesh <gnetravali@sonusnet.com> wrote: > I have 2 interfaces eth0 and eth1 on the system connected to different subnets. I need to route all the outgoing DNS traffic of the system via eth1 interface. Pls let me know if below IPTABLES rules is proper way ? > Hi, the "iptables -A FORWARD" authorizes or denies traffic only. There is no impact on the routing of your traffic. You want to perform a "policy based routing". Your policy is "All UDP/53 traffic must use eth1 as outgoing interface". To achieve this, have a look to iproute and the LARTC guide http://lartc.org/howto/ http://lartc.linuxsystems.it/index.php/Main_Page Regards, Yann. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Routing the DNS Traffic via specific interface. 2012-01-25 7:41 Routing the DNS Traffic via specific interface Netravali Ganesh 2012-01-25 8:41 ` Yann Lejeune @ 2012-01-25 9:33 ` gapsf 2012-01-27 15:51 ` SamLT 2012-02-02 4:52 ` Netravali Ganesh 2012-01-25 18:00 ` Rick Jones 2 siblings, 2 replies; 8+ messages in thread From: gapsf @ 2012-01-25 9:33 UTC (permalink / raw) To: netfilter, gnetravali No. You should use "Policy routing" with MARK target in iptables. Mark outgoing DNS packets with iptables in mangle PREOROUTING for example. # iptables -t mangle -A PREROUTING -p udp --dport 53 -j MARK --set-mark 0x4 Create additional routing table with different routing rules. Add new entry in /etc/iproute2/rt_tables ========================================= # # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 1 isp2 # <- new entry ========================================= Then execute # ip route flush table isp2 and add defalt route into newly created table # route add default via <ip_of_your_eth2_gateway> dev eth2 table isp2 Add new policy in RPDB. # ip rule add from all fwmark 0x4 table isp2 Check RPDB # ip rule show You should view somthing like this: 0: from all lookup local 32763: from all fwmark 0x4 lookup isp2 32766: from all lookup main 32767: from all lookup default In result: all traffic routed with main routing table, except marked DNS traffic routed via "isp2" routing table via its default route and iface. View picture http://postimage.org/image/nn9owf5x7/ for example. NG> Hi .. NG> I have 2 interfaces eth0 and eth1 on the system connected to different subnets. I need to route all the outgoing DNS traffic of the system via eth1 interface. Pls let me know if below IPTABLES rules is proper way ? NG> Block the output DNS traffic on eth0 interface. NG> iptables -A FORWARD -p udp -o eth0 --dport 53 -j DROP NG> Forward output DNS traffic from eth1 interface NG> iptables -A FORWARD -p udp -o eth1 --dport 53 -j ACCEPT NG> Thanks NG> Ganesh NG> -- NG> To unsubscribe from this list: send the line "unsubscribe netfilter" in NG> the body of a message to majordomo@vger.kernel.org NG> More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Routing the DNS Traffic via specific interface. 2012-01-25 9:33 ` gapsf @ 2012-01-27 15:51 ` SamLT 2012-02-02 4:52 ` Netravali Ganesh 1 sibling, 0 replies; 8+ messages in thread From: SamLT @ 2012-01-27 15:51 UTC (permalink / raw) To: gapsf; +Cc: netfilter, gnetravali On Wed, Jan 25, 2012 at 04:33:50PM +0700, gapsf@yandex.ru wrote: > No. You should use "Policy routing" with MARK target in iptables. > > Mark outgoing DNS packets with iptables in mangle PREOROUTING for example. > # iptables -t mangle -A PREROUTING -p udp --dport 53 -j MARK --set-mark 0x4 > > Create additional routing table with different routing rules. > Add new entry in /etc/iproute2/rt_tables > ========================================= > # > # reserved values > # > 255 local > 254 main > 253 default > 0 unspec > # > # local > # > #1 inr.ruhep > 1 isp2 # <- new entry > ========================================= > > Then execute > # ip route flush table isp2 > and add defalt route into newly created table > # route add default via <ip_of_your_eth2_gateway> dev eth2 table isp2 > > Add new policy in RPDB. > # ip rule add from all fwmark 0x4 table isp2 Consider adding a preference/priority to your rule(s) to avoid potential future headaches > > Check RPDB > # ip rule show > You should view somthing like this: > 0: from all lookup local > 32763: from all fwmark 0x4 lookup isp2 > 32766: from all lookup main > 32767: from all lookup default > > In result: all traffic routed with main routing table, except marked DNS traffic routed > via "isp2" routing table via its default route and iface. > View picture http://postimage.org/image/nn9owf5x7/ for example. > > NG> Hi .. > > NG> I have 2 interfaces eth0 and eth1 on the system connected to different subnets. I need to route all the outgoing DNS traffic of the system via eth1 interface. Pls let me know if below IPTABLES rules is proper way ? > > NG> Block the output DNS traffic on eth0 interface. > > NG> iptables -A FORWARD -p udp -o eth0 --dport 53 -j DROP > > NG> Forward output DNS traffic from eth1 interface > > NG> iptables -A FORWARD -p udp -o eth1 --dport 53 -j ACCEPT > > > NG> Thanks > NG> Ganesh > > > NG> -- > NG> To unsubscribe from this list: send the line "unsubscribe netfilter" in > NG> the body of a message to majordomo@vger.kernel.org > NG> More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- > To unsubscribe from this list: send the line "unsubscribe netfilter" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: Routing the DNS Traffic via specific interface. 2012-01-25 9:33 ` gapsf 2012-01-27 15:51 ` SamLT @ 2012-02-02 4:52 ` Netravali Ganesh 2012-02-03 7:30 ` gapsf 1 sibling, 1 reply; 8+ messages in thread From: Netravali Ganesh @ 2012-02-02 4:52 UTC (permalink / raw) To: gapsf@yandex.ru, netfilter@vger.kernel.org Hi.. Thanks for the help. This worked excellent for me. I have another question on this. Suppose if I have 2 interfaces say eth2 and eth3. If I want to implement conditional routing, say ex, eth2 is down and all DNS traffic needs to redirect via eth3 upon detecting the link failure, how do I do that. Thanks Ganesh Netravali -----Original Message----- From: gapsf@yandex.ru [mailto:gapsf@yandex.ru] Sent: Wednesday, January 25, 2012 3:04 PM To: netfilter@vger.kernel.org; Netravali Ganesh Subject: Re: Routing the DNS Traffic via specific interface. No. You should use "Policy routing" with MARK target in iptables. Mark outgoing DNS packets with iptables in mangle PREOROUTING for example. # iptables -t mangle -A PREROUTING -p udp --dport 53 -j MARK --set-mark 0x4 Create additional routing table with different routing rules. Add new entry in /etc/iproute2/rt_tables ========================================= # # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 1 isp2 # <- new entry ========================================= Then execute # ip route flush table isp2 and add defalt route into newly created table # route add default via <ip_of_your_eth2_gateway> dev eth2 table isp2 Add new policy in RPDB. # ip rule add from all fwmark 0x4 table isp2 Check RPDB # ip rule show You should view somthing like this: 0: from all lookup local 32763: from all fwmark 0x4 lookup isp2 32766: from all lookup main 32767: from all lookup default In result: all traffic routed with main routing table, except marked DNS traffic routed via "isp2" routing table via its default route and iface. View picture http://postimage.org/image/nn9owf5x7/ for example. NG> Hi .. NG> I have 2 interfaces eth0 and eth1 on the system connected to different subnets. I need to route all the outgoing DNS traffic of the system via eth1 interface. Pls let me know if below IPTABLES rules is proper way ? NG> Block the output DNS traffic on eth0 interface. NG> iptables -A FORWARD -p udp -o eth0 --dport 53 -j DROP NG> Forward output DNS traffic from eth1 interface NG> iptables -A FORWARD -p udp -o eth1 --dport 53 -j ACCEPT NG> Thanks NG> Ganesh NG> -- NG> To unsubscribe from this list: send the line "unsubscribe netfilter" NG> in the body of a message to majordomo@vger.kernel.org More majordomo NG> info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Routing the DNS Traffic via specific interface. 2012-02-02 4:52 ` Netravali Ganesh @ 2012-02-03 7:30 ` gapsf 2012-02-05 9:46 ` Olshvang, LevX 0 siblings, 1 reply; 8+ messages in thread From: gapsf @ 2012-02-03 7:30 UTC (permalink / raw) To: Netravali Ganesh; +Cc: netfilter Well, I know two ways, but I don't know what is right from the standpoint of an more experienced sysadmin. Solution #1 Script that periodically do "health check" of a link (i.e. route) by ping some reliable host (router) reachable via eth2. See example below. Run it in background from another bash script like `chkroutes &`. Or even try to connect to DNS-server with `nc` instead of pings: `nc -c exit -w1 <ip_of_DNS_server> 53` Because ISPs equipment hardware exploited in this scenario, I do not know whether it is acceptable according to netiquette. If you want to react only to the interface down on gateway you should use somthing like "post-up", "post-down" in /etc/network/interfaces in Debian. On post-up add rule in RPDB, on post-down you delete this entry. For tarffic switching you have three options: - modify additional routing tables isp2: add/delete default route or - modify RPDB rules: add/delete 'from all fwmark 0x4 lookup isp2' entry or even - modify iptables rules - add/delete MARK rule. Solution #2 Use dynamic routing protocols and daemons like zebra or quagga. For me it's look like overkill in this simple situation. And I still can't undestand how exactly routing daemon on gateway finds that route is dad. So applicability of dynamic routing for this purposes is still unclear for me. === chkroutes ======================================================================================= #!/bin/sh SWITCHED=0 TARGET=<some_reliable_host> test_route2_cycle() { while true; do ping -I eth2 -c3 $TARGET PING=$? if [ "$PING" == "0" && "$SWITCHED" == "1"]; then # TARGET reachable ip rule add from all fwmark 0x4 table inet2 ip route flush cache SWITCHED=0 else # TARGET unreachable if [ "$SWITCHED" == "0" ]; then ip rule del from all fwmark 0x4 table inet2 ip route flush cache SWITCHED=1 fi fi sleep 10 done } echo $$ > /var/run/chkroutes.pid test_route2_cycle ============================================================================================== NG> Hi.. NG> Thanks for the help. This worked excellent for me. I have another question on this. NG> Suppose if I have 2 interfaces say eth2 and eth3. If I want to implement conditional routing, say ex, eth2 is down and all DNS traffic needs to redirect via eth3 upon detecting the link failure, how do I do that. NG> Thanks NG> Ganesh Netravali NG> -----Original Message----- NG> From: gapsf@yandex.ru [mailto:gapsf@yandex.ru] NG> Sent: Wednesday, January 25, 2012 3:04 PM NG> To: netfilter@vger.kernel.org; Netravali Ganesh NG> Subject: Re: Routing the DNS Traffic via specific interface. NG> No. You should use "Policy routing" with MARK target in iptables. NG> Mark outgoing DNS packets with iptables in mangle PREOROUTING for example. NG> # iptables -t mangle -A PREROUTING -p udp --dport 53 -j MARK --set-mark 0x4 NG> Create additional routing table with different routing rules. NG> Add new entry in /etc/iproute2/rt_tables ========================================= NG> # NG> # reserved values NG> # NG> 255 local NG> 254 main NG> 253 default NG> 0 unspec NG> # NG> # local NG> # NG> #1 inr.ruhep NG> 1 isp2 # <- new entry NG> ========================================= NG> Then execute NG> # ip route flush table isp2 NG> and add defalt route into newly created table # route add default via <ip_of_your_eth2_gateway> dev eth2 table isp2 NG> Add new policy in RPDB. NG> # ip rule add from all fwmark 0x4 table isp2 NG> Check RPDB NG> # ip rule show NG> You should view somthing like this: NG> 0: from all lookup local NG> 32763: from all fwmark 0x4 lookup isp2 NG> 32766: from all lookup main NG> 32767: from all lookup default NG> In result: all traffic routed with main routing table, except marked DNS traffic routed via "isp2" routing table via its default route and iface. NG> View picture http://postimage.org/image/nn9owf5x7/ for example. NG>> Hi .. NG>> I have 2 interfaces eth0 and eth1 on the system connected to different subnets. I need to route all the outgoing DNS traffic of the system via eth1 interface. Pls let me know if below IPTABLES rules is proper way ? NG>> Block the output DNS traffic on eth0 interface. NG>> iptables -A FORWARD -p udp -o eth0 --dport 53 -j DROP NG>> Forward output DNS traffic from eth1 interface NG>> iptables -A FORWARD -p udp -o eth1 --dport 53 -j ACCEPT NG>> Thanks NG>> Ganesh NG>> -- NG>> To unsubscribe from this list: send the line "unsubscribe netfilter" NG>> in the body of a message to majordomo@vger.kernel.org More majordomo NG>> info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: Routing the DNS Traffic via specific interface. 2012-02-03 7:30 ` gapsf @ 2012-02-05 9:46 ` Olshvang, LevX 0 siblings, 0 replies; 8+ messages in thread From: Olshvang, LevX @ 2012-02-05 9:46 UTC (permalink / raw) To: gapsf@yandex.ru, Netravali Ganesh; +Cc: netfilter@vger.kernel.org Hi Ganesg, listers I made small modification of dnsmasq daemon to make it route queries view specific interface. The solution leverages SO_BINDTODEVICE socket option, and it works perfectly. Hope it helps, I can provide sources if you are interested. -----Original Message----- From: netfilter-owner@vger.kernel.org [mailto:netfilter-owner@vger.kernel.org] On Behalf Of gapsf@yandex.ru Sent: Friday, February 03, 2012 09:31 To: Netravali Ganesh Cc: netfilter@vger.kernel.org Subject: Re: Routing the DNS Traffic via specific interface. Well, I know two ways, but I don't know what is right from the standpoint of an more experienced sysadmin. Solution #1 Script that periodically do "health check" of a link (i.e. route) by ping some reliable host (router) reachable via eth2. See example below. Run it in background from another bash script like `chkroutes &`. Or even try to connect to DNS-server with `nc` instead of pings: `nc -c exit -w1 <ip_of_DNS_server> 53` Because ISPs equipment hardware exploited in this scenario, I do not know whether it is acceptable according to netiquette. If you want to react only to the interface down on gateway you should use somthing like "post-up", "post-down" in /etc/network/interfaces in Debian. On post-up add rule in RPDB, on post-down you delete this entry. For tarffic switching you have three options: - modify additional routing tables isp2: add/delete default route or - modify RPDB rules: add/delete 'from all fwmark 0x4 lookup isp2' entry or even - modify iptables rules - add/delete MARK rule. Solution #2 Use dynamic routing protocols and daemons like zebra or quagga. For me it's look like overkill in this simple situation. And I still can't undestand how exactly routing daemon on gateway finds that route is dad. So applicability of dynamic routing for this purposes is still unclear for me. === chkroutes ======================================================================================= #!/bin/sh SWITCHED=0 TARGET=<some_reliable_host> test_route2_cycle() { while true; do ping -I eth2 -c3 $TARGET PING=$? if [ "$PING" == "0" && "$SWITCHED" == "1"]; then # TARGET reachable ip rule add from all fwmark 0x4 table inet2 ip route flush cache SWITCHED=0 else # TARGET unreachable if [ "$SWITCHED" == "0" ]; then ip rule del from all fwmark 0x4 table inet2 ip route flush cache SWITCHED=1 fi fi sleep 10 done } echo $$ > /var/run/chkroutes.pid test_route2_cycle ============================================================================================== NG> Hi.. NG> Thanks for the help. This worked excellent for me. I have another question on this. NG> Suppose if I have 2 interfaces say eth2 and eth3. If I want to implement conditional routing, say ex, eth2 is down and all DNS traffic needs to redirect via eth3 upon detecting the link failure, how do I do that. NG> Thanks NG> Ganesh Netravali NG> -----Original Message----- NG> From: gapsf@yandex.ru [mailto:gapsf@yandex.ru] NG> Sent: Wednesday, January 25, 2012 3:04 PM NG> To: netfilter@vger.kernel.org; Netravali Ganesh NG> Subject: Re: Routing the DNS Traffic via specific interface. NG> No. You should use "Policy routing" with MARK target in iptables. NG> Mark outgoing DNS packets with iptables in mangle PREOROUTING for example. NG> # iptables -t mangle -A PREROUTING -p udp --dport 53 -j MARK --set-mark 0x4 NG> Create additional routing table with different routing rules. NG> Add new entry in /etc/iproute2/rt_tables ========================================= NG> # NG> # reserved values NG> # NG> 255 local NG> 254 main NG> 253 default NG> 0 unspec NG> # NG> # local NG> # NG> #1 inr.ruhep NG> 1 isp2 # <- new entry NG> ========================================= NG> Then execute NG> # ip route flush table isp2 NG> and add defalt route into newly created table # route add default via <ip_of_your_eth2_gateway> dev eth2 table isp2 NG> Add new policy in RPDB. NG> # ip rule add from all fwmark 0x4 table isp2 NG> Check RPDB NG> # ip rule show NG> You should view somthing like this: NG> 0: from all lookup local NG> 32763: from all fwmark 0x4 lookup isp2 NG> 32766: from all lookup main NG> 32767: from all lookup default NG> In result: all traffic routed with main routing table, except marked DNS traffic routed via "isp2" routing table via its default route and iface. NG> View picture http://postimage.org/image/nn9owf5x7/ for example. NG>> Hi .. NG>> I have 2 interfaces eth0 and eth1 on the system connected to different subnets. I need to route all the outgoing DNS traffic of the system via eth1 interface. Pls let me know if below IPTABLES rules is proper way ? NG>> Block the output DNS traffic on eth0 interface. NG>> iptables -A FORWARD -p udp -o eth0 --dport 53 -j DROP NG>> Forward output DNS traffic from eth1 interface NG>> iptables -A FORWARD -p udp -o eth1 --dport 53 -j ACCEPT NG>> Thanks NG>> Ganesh NG>> -- NG>> To unsubscribe from this list: send the line "unsubscribe netfilter" NG>> in the body of a message to majordomo@vger.kernel.org More majordomo NG>> info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe netfilter" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html --------------------------------------------------------------------- Intel Israel (74) Limited This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Routing the DNS Traffic via specific interface. 2012-01-25 7:41 Routing the DNS Traffic via specific interface Netravali Ganesh 2012-01-25 8:41 ` Yann Lejeune 2012-01-25 9:33 ` gapsf @ 2012-01-25 18:00 ` Rick Jones 2 siblings, 0 replies; 8+ messages in thread From: Rick Jones @ 2012-01-25 18:00 UTC (permalink / raw) To: Netravali Ganesh; +Cc: netfilter@vger.kernel.org On 01/24/2012 11:41 PM, Netravali Ganesh wrote: > Hi .. > > I have 2 interfaces eth0 and eth1 on the system connected to > different subnets. I need to route all the outgoing DNS traffic of > the system via eth1 interface. Pls let me know if below IPTABLES > rules is proper way ? Are the IPs of the DNS servers known and reasonably static? And is there any concern if other traffic to those IPs goes out the one interface? If the DNS server IPs are static, and it wouldn't hurt to have other traffic go out the same interface, why not just create some static host routes? rick jones ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2012-02-05 9:46 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-01-25 7:41 Routing the DNS Traffic via specific interface Netravali Ganesh 2012-01-25 8:41 ` Yann Lejeune 2012-01-25 9:33 ` gapsf 2012-01-27 15:51 ` SamLT 2012-02-02 4:52 ` Netravali Ganesh 2012-02-03 7:30 ` gapsf 2012-02-05 9:46 ` Olshvang, LevX 2012-01-25 18:00 ` Rick Jones
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox