NetBSD-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
ipf questions
Hi,
I am currently in the process of translating the iptables/ip6tables +
ip invocations in an C application to ipf/ipfw + route, to support
systems with that. Before you ask, special case scenario, it has to
be done this way, pf/npf seems to be no option.
I am not 100% convinced that npf is not an option, but at this
stage of code reading I want to try and replicate it with ipf/ipfw + route.
The part of the application this is part of serves as an dns query
interceptor, a full rewrite as a dns server is a future task.
question 1: pf knows about user <user>. what about ipf?
question 2: How do you exclude link-local traffic in ipf? (see
appended file for the iptables example I refer to)
question 3: Can a person who knows more about Firewalls than I do
explain to me what this would be in ipf and ipfw?:
iptables: table 'mangle' is for packet alteration,
OUTPUT: for altering locally-generated packages before routing
code in question, without my local work:
https://git.gnunet.org/gnunet.git/tree/src/dns/gnunet-helper-dns.c
Appended is a copy of my translation process and the original iptables/ip
invocations (didn't achieve that much so far due to lack of time for reading).
Thanks!
We must check in the C code that we are on BSD when we use
the route command.
We must check that ipf / ipfw is enabled.
When ipf gets no -6 passed, the rule is applied for both ipv6 and ipv4.
pf knows about user <user>. what about ipf?
How to exclude link-local traffic in ipf?
iptables:
table 'mangle' is for packet alteration,
OUTPUT: for altering locally-generated packages before routing
-----------------------------------------------------------------------
// update routing tables
// forward everything from out EGID (which should only be held by the
// gnunet-service-dns) and with destination to port 53 on UDP, without
// hijacking
iptables -m owner -t mangle -I OUTPUT 1 -p udp --gid-owner mygid --dport DNS_PORT -j ACCEPT
ip6tables -m owner -t mangle -I OUTPUT 1 -p udp --gid-owner mygid --dport DNS_PORT -j ACCEPT
echo "pass out proto udp from any port = DNS_PORT" | ipf -f -
// mark all of the other dns traffic using our mark DNS_MARK, unless
// it is on a link-local IPv6 address, which we can not support.
iptables -t mangle -I OUTPUT 2 -p udp --dport DNS_PORT -j MARK --set-mark DNS_MARK
// ! -s fe80::/10 excludes link-local traffic
ip6tables -t mangle -I OUTPUT 2 -p udp --dport DNS_PORT ! -s fe80::/10 -j MARK --set-mark DNS_MARK
echo "pass out proto udp from any port = DNS_PORT set-tag(nat=DNS_MARK)" | ipf -f -
echo " " | ipf -6 -f -
// forward all marked dns traffic to our DNS_TABLE
ip rule add fwmark DNS_MARK table DNS_TABLE
ip -6 rule add fwmark DNS_MARK table DNS_TABLE
route
route
// finally add rule in our forwarding table to pass to our virtual interface
ip route add default dev dev table DNS_TABLE
ip -6 route add default dev dev table DNS_TABLE
route add default dev
// update routing tables again
// now undo updating of routing tables, normal exit or clean-up-on-error case
// cleanup_route_4:
ip -6 route del default dev dev table DNS_TABLE
// cleanup_route_4b:
ip route del default dev dev table DNS_TABLE
// cleanup_forward_3:
ip -6 rule del fwmark DNS_MARK table DNS_TABLE
// cleanup_forward_3b:
ip rule del fwmark DNS_MARK table DNS_TABLE
// cleanup_mark_2:
ip6tables -t mangle -D OUTPUT -p udp --dport DNS_PORT ! -s fe80::/10 -j MARK --set-mark DNS_MARK
echo " " | ipf -6 -f -
// cleanup_mark_2b:
iptables -t mangle -D OUTPUT -p udp --dport DNS_PORT -j MARK --set-mark DNS_MARK
echo " " | ipf -f -
// cleanup_mangle_1:
ip6tables -m owner -t mangle -D OUTPUT -p udp --gid-owner mygid --dport DNS_PORT -j ACCEPT
echo " " | ipf -6 -f -
// cleanup_mangle_1b:
iptables -m owner -t mangle -D OUTPUT -p udp --gid-owner mygid --dport DNS_PORT -j ACCEPT
echo " " | ipf -f -
Home |
Main Index |
Thread Index |
Old Index