IPVS full NAT support + netfilter 'ipvs' match support
Subsystems (5)
Simon Horman
maintainercover IPVS full NAT support + netfilter 'ipvs' match support
This is a repost of a patch-series posted by Hannes Eder last September. This is v2 of the patch series and I don't see any outstanding objections to it in the mailing list archives.
Series v2.8 Convert XT_IPVS_IPVS_* from #defines to an enum,
as suggested by Jan Engelhardt <[email protected]>
Series v2.7 Fixes header miss-match between kernel and user-space
Series v2.6 fixes the arguments to of %pI4
Series v2.5 fixes some problems introduced in v2.4.
Series v2.4 addresses all of the concerns that Patrick McHardy raised witht the v2.3 series.
The original cover-email from Hannes follows.
The diffstat output has been updated to reflect changes by me.
Mark Brooks has tested the v2.7 patchset, and found no problems. Details of his test follow Hannes's cover. I have made minor edits to Mark's email but not the results.
----------------------------------------------------------------------
From: Hannes Eder <[email protected]>
The following series implements full NAT support for IPVS. The approach is via a minimal change to IPVS (make friends with nf_conntrack) and adding a netfilter matcher, kernel- and user-space part, i.e. xt_ipvs and libxt_ipvs.
Example usage:
% ipvsadm -A -t 192.168.100.30:80 -s rr
% ipvsadm -a -t 192.168.100.30:80 -r 192.168.10.20:80 -m
# ...
# Source NAT for VIP 192.168.100.30:80
% iptables -t nat -A POSTROUTING -m ipvs --vaddr 192.168.100.30/32 \
Quoted 1 line
--vport 80 -j SNAT --to-source 192.168.10.10
or SNAT-ing only a specific real server:
% iptables -t nat -A POSTROUTING --dst 192.168.11.20 \
Quoted 1 line
-m ipvs --vaddr 192.168.100.30/32 -j SNAT --to-source 192.168.10.10
First of all, thanks for all the feedback. This is the changelog for v2:
- Make ip_vs_ftp work again. Setup nf_conntrack expectations for related data connections (based on Julian's patch see
http://www.ssi.bg/~ja/nfct/) and let nf_conntrack/nf_nat do the packet mangling and the TCP sequence adjusting.
This change rises the question how to deal with ip_vs_sync? Does it work together with conntrackd? Wild idea: what about getting rid of ip_vs_sync and piggy packing all on nf_conntrack and use conntrackd?
Any comments on this?
- xt_ipvs: add new rule '--vportctl port' to match the VIP port of the controlling connection, e.g. port 21 for FTP. Can be used to match a related data connection for FTP:
# SNAT FTP control connection % iptables -t nat -A POSTROUTING -m ipvs --vaddr 192.168.100.30/32 \ > --vport 21 -j SNAT --to-source 192.168.10.10 # SNAT FTP passive data connection % iptables -t nat -A POSTROUTING -m ipvs --vaddr 192.168.100.30/32 \ > --vportctl 21 -j SNAT --to-source 192.168.10.10
- xt_ipvs: use 'par->family' instead of 'skb->protocol'
- xt_ipvs: add ipvs_mt_check and restrict to NFPROTO_IPV4 and NFPROTO_IPV6
- Call nf_conntrack_alter_reply(), so helper lookup is performed based on the changed tuple.
Changes to the linux kernel
(nf-next-2.6, "bridge: add per bridge device controls for invoking iptables")
Hannes Eder (3):
netfilter: xt_ipvs (netfilter matcher for IPVS)
IPVS: make friends with nf_conntrack
IPVS: make FTP work with full NAT support
include/linux/netfilter/xt_ipvs.h | 27 +++++ include/net/ip_vs.h | 2 net/netfilter/Kconfig | 10 ++ net/netfilter/Makefile | 1 net/netfilter/ipvs/Kconfig | 4 net/netfilter/ipvs/ip_vs_app.c | 43 --------- net/netfilter/ipvs/ip_vs_core.c | 37 -------- net/netfilter/ipvs/ip_vs_ftp.c | 174 +++++++++++++++++++++++++++++++++++--- net/netfilter/ipvs/ip_vs_proto.c | 1 net/netfilter/ipvs/ip_vs_xmit.c | 29 ++++++ net/netfilter/xt_ipvs.c | 189 +++++++++++++++++++++++++++++++++++++ 11 files changed, 422 insertions(+), 95 deletions(-) create mode 100644 include/linux/netfilter/xt_ipvs.h create mode 100644 net/netfilter/xt_ipvs.c
Changes to iptables
(iptables.git, "xt_quota: also document negation")
Hannes Eder (1):
libxt_ipvs: user-space lib for netfilter matcher xt_ipvs
configure.ac | 10 1 extensions/libxt_ipvs.c | 365 +++++++++++++++++++++++++++++++++++++ extensions/libxt_ipvs.man | 24 ++ include/linux/netfilter/xt_ipvs.h | 27 +++ 4 files changed, 424 insertions(+), 2 deletions(-) create mode 100644 extensions/libxt_ipvs.c create mode 100644 extensions/libxt_ipvs.man create mode 100644 include/linux/netfilter/xt_ipvs.h
----------------------------------------------------------------------
From: Mark Brooks <[email protected]>
I'm going to detail my setup and what I did to test/confirm this (you can probably skip this bit if you want bit I thought I should include it for completeness)
The Loadbalancer
IPVS 1.2.1
iptables 1.4.8 --patched
kernel - 2.6.35-rc1 --patched
eth0 ip 192.168.17.93
eth0:45 192.168.18.21 (I would have used eth1 but couldn't find a test box spare with 2 network cards in)
My test box -
eth0 192.168.18.1
The Webserver -
192.168.17.4:80
Commands to setup ipvs and iptables
IPVS
ipvsadm -A -t 192.168.18.21:80 -s rr
ipvsadm -a -t 192.168.18.21:80 -r 192.168.17.4:80 -m
iptables/usr/local/sbin/iptables -t nat -A POSTROUTING -m ipvs --vaddr 192.168.18.21/24 --vport 80 -j SNAT --to-source 192.168.17.93
iptables shows -
iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination SNAT all -- anywhere anywhere vaddr
192.168.18.0/24 vport 80 to:192.168.17.93
ipvsadm shows -
ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.18.21:80 rr
-> 192.168.17.4:80 Masq 1 0 0
Connected to the IP from my browser page loaded fine and you can see in the apache log -
"192.168.17.93 - - [21/Jul/2010:08:44:00 -0400] "GET / HTTP/1.1" 200 82"
Finally I ran a couple of tests with httperf for about 6 hours to see if anything strange happened
httperf --hog --server 192.168.18.21 --num-con 250 --ra $NUMBER --timeout 5
A maximum number of connections of 250 at rates between 1 and 250 connections per second. Every connection completed fine and there appeared to be no problems.
Simon Horman
maintainerPATCH 1/4 netfilter: xt_ipvs (netfilter matcher for IPVS)
From: Hannes Eder <[email protected]>
This implements the kernel-space side of the netfilter matcher xt_ipvs.
---
include/linux/netfilter/xt_ipvs.h | 27 ++++ net/netfilter/Kconfig | 10 + net/netfilter/Makefile | 1 net/netfilter/ipvs/ip_vs_proto.c | 1 net/netfilter/xt_ipvs.c | 189 +++++++++++++++++++++++++++++++++++++ 5 files changed, 228 insertions(+), 0 deletions(-) create mode 100644 include/linux/netfilter/xt_ipvs.h create mode 100644 net/netfilter/xt_ipvs.c
v2.8
* Trivial rediff
As suggested by Jan Engelhardt
* Use an enum instead of #ifdefs for flags and masks
v2.5
* Use nf_ct_is_untracked(ct) instead of ct == nf_ct_is_untracked(ct), the later is blatantly incorrect.
v2.4
As per advice from Patrick McHardy
* Reduce size of l4proto and fwd_method members of struct xt_ipvs_mtinf from __u16 to __u8
* Use nf_conntrack_untracked() instead of &nf_conntrack_untracked
v2.3
As per advice from Patrick McHardy
* Don't define a value for _XT_IPVS_H in xt_ipvs.h
* Depend on NF_CONNTRACK
* Update to new API
- ipvs_mt_check() should return an int rather than a bool
- Change type of ipvs_mt()'s par parameter from struct xt_action_param to struct xt_match_param
- Make ipvs_mt()'s par parameter non-const
v2.1, v2.2
No Change
include/linux/netfilter/xt_ipvs.h new file +27 -0
@@ -0,0 +1,27 @@ +#ifndef _XT_IPVS_H +#define _XT_IPVS_H + +enum { +XT_IPVS_IPVS_PROPERTY =1 <<0 ,/* all other options imply this one */ +XT_IPVS_PROTO =1 <<1 , +XT_IPVS_VADDR =1 <<2 , +XT_IPVS_VPORT =1 <<3 , +XT_IPVS_DIR =1 <<4 , +XT_IPVS_METHOD =1 <<5 , +XT_IPVS_VPORTCTL =1 <<6 , +XT_IPVS_MASK = (1 <<7 ) -1 , +XT_IPVS_ONCE_MASK =XT_IPVS_MASK & ~XT_IPVS_IPVS_PROPERTY +}; + +struct xt_ipvs_mtinfo { +union nf_inet_addr vaddr, vmask; +__be16 vport; +__u8 l4proto; +__u8 fwd_method; +__be16 vportctl; + +__u8 invert; +__u8 bitmask; +}; + +#endif /* _XT_IPVS_H */
net/netfilter/Kconfig +10 -0
@@ -742,6 +742,16 @@ config NETFILTER_XT_MATCH_IPRANGE If unsure, say M. +config NETFILTER_XT_MATCH_IPVS + tristate '"ipvs" match support' + depends on IP_VS + depends on NETFILTER_ADVANCED + depends on NF_CONNTRACK + help + This option allows you to match against IPVS properties of a packet. + + If unsure, say N. + config NETFILTER_XT_MATCH_LENGTH tristate '"length" match support' depends on NETFILTER_ADVANCED
net/netfilter/Makefile +1 -0
@@ -77,6 +77,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_HASHLIMI obj-$(CONFIG_NETFILTER_XT_MATCH_HELPER) += xt_helper.o obj-$(CONFIG_NETFILTER_XT_MATCH_HL) += xt_hl.o obj-$(CONFIG_NETFILTER_XT_MATCH_IPRANGE) += xt_iprange.o +obj-$(CONFIG_NETFILTER_XT_MATCH_IPVS) += xt_ipvs.o obj-$(CONFIG_NETFILTER_XT_MATCH_LENGTH) += xt_length.o obj-$(CONFIG_NETFILTER_XT_MATCH_LIMIT) += xt_limit.o obj-$(CONFIG_NETFILTER_XT_MATCH_MAC) += xt_mac.o
net/netfilter/ipvs/ip_vs_proto.c +1 -0
@@ -98,6 +98,7 @@ struct ip_vs_protocol * ip_vs_proto_get(return NULL ; } +EXPORT_SYMBOL (ip_vs_proto_get);/*
net/netfilter/xt_ipvs.c new file +189 -0
189 lines not on this page · raw message
Re: [patch v2.8 1/4] netfilter: xt_ipvs (netfilter matcher for IPVS)
Am 22.07.2010 09:35, schrieb Simon Horman:
Quoted 8 lines
From: Hannes Eder <[email protected]>
This implements the kernel-space side of the netfilter matcher
xt_ipvs.[ minor fixes by Simon Horman <[email protected]> ]Signed-off-by Hannes Eder <[email protected]>Signed-off-by Simon Horman <[email protected]>
Quoted 7 lines
---
include/linux/netfilter/xt_ipvs.h | 27 ++++ net/netfilter/Kconfig | 10 + net/netfilter/Makefile | 1 net/netfilter/ipvs/ip_vs_proto.c | 1 net/netfilter/xt_ipvs.c | 189 +++++++++++++++++++++++++++++++++++++
I added xt_ipvs.h to Kbuild and applied the patch, thanks.
Simon Horman
maintainerPATCH 2/4 IPVS: make friends with nf_conntrack
In reply to Simon HormanFrom: Hannes Eder <[email protected]>
Update the nf_conntrack tuple in reply direction, as we will see traffic from the real server (RIP) to the client (CIP). Once this is done we can use netfilters SNAT in POSTROUTING, especially with xt_ipvs, to do source NAT, e.g.:
% iptables -t nat -A POSTROUTING -m ipvs --vaddr 192.168.100.30/32 --vport 80 \
Quoted 1 line
-j SNAT --to-source 192.168.10.10
---
net/netfilter/ipvs/Kconfig | 2 +- net/netfilter/ipvs/ip_vs_core.c | 36 ------------------------------------ net/netfilter/ipvs/ip_vs_xmit.c | 29 +++++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 37 deletions(-)
v2.4
As per advice from Patrick McHardy
* Use nf_conntrack_untracked() instead of &nf_conntrack_untracked
v2.1, v2.2, v2.3
No change
net/netfilter/ipvs/Kconfig +1 -1
@@ -3,7 +3,7 @@ # menuconfig IP_VS tristate "IP virtual server support" - depends on NET && INET && NETFILTER + depends on NET && INET && NETFILTER && NF_CONNTRACK ---help--- IP Virtual Server support will let you build a high-performance virtual server based on cluster of two or more real servers. This
net/netfilter/ipvs/ip_vs_core.c +0 -36
@@ -536,26 +536,6 @@ int ip_vs_leave(struct ip_vs_service *svreturn NF_DROP ; } - -/* -* It is hooked before NF_IP_PRI_NAT_SRC at the NF_INET_POST_ROUTING -* chain, and is used for VS/NAT. -* It detects packets for VS/NAT connections and sends the packets -* immediately. This can avoid that iptable_nat mangles the packets -* for VS/NAT. -*/ -static unsigned int ip_vs_post_routing (unsigned int hooknum, -struct sk_buff *skb, -const struct net_device *in, -const struct net_device *out, -int (*okfn)(struct sk_buff *)) -{ -if (!skb->ipvs_property) -return NF_ACCEPT ; -/* The packet was sent from IPVS, exit this chain */ -return NF_STOP ; -} -__sum16 ip_vs_checksum_complete (struct sk_buff *skb,int offset) {return csum_fold (skb_checksum (skb, offset, skb->len - offset,0 ));
@@ -1499,14 +1479,6 @@ static struct nf_hook_ops ip_vs_ops[] __ .hooknum = NF_INET_FORWARD, .priority = 99, }, -/* Before the netfilter connection tracking, exit from POST_ROUTING */ - { - .hook = ip_vs_post_routing, - .owner = THIS_MODULE, - .pf = PF_INET, - .hooknum = NF_INET_POST_ROUTING, - .priority = NF_IP_PRI_NAT_SRC-1, - },#ifdef CONFIG_IP_VS_IPV6 /* After packet filtering, forward packet through VS/DR, VS/TUN, * or VS/NAT(change destination), so that filtering rules can be
@@ -1535,14 +1507,6 @@ static struct nf_hook_ops ip_vs_ops[] __ .hooknum = NF_INET_FORWARD, .priority = 99, }, -/* Before the netfilter connection tracking, exit from POST_ROUTING */ - { - .hook = ip_vs_post_routing, - .owner = THIS_MODULE, - .pf = PF_INET6, - .hooknum = NF_INET_POST_ROUTING, - .priority = NF_IP6_PRI_NAT_SRC-1, - },#endif };
net/netfilter/ipvs/ip_vs_xmit.c +29 -0
@@ -28,6 +28,7 @@#include <net/ip6_route.h> #include <linux/icmpv6.h> #include <linux/netfilter.h> +#include <net/netfilter/nf_conntrack.h> #include <linux/netfilter_ipv4.h> #include <net/ip_vs.h>
@@ -348,6 +349,30 @@ ip_vs_bypass_xmit_v6(struct sk_buff *skb }#endif +static void +ip_vs_update_conntrack (struct sk_buff *skb,struct ip_vs_conn *cp) +{ +struct nf_conn *ct = (struct nf_conn *)skb->nfct; +struct nf_conntrack_tuple new_tuple; + +if (ct ==NULL ||nf_ct_is_untracked (ct) ||nf_ct_is_confirmed (ct)) +return ; + +/* +* The connection is not yet in the hashtable, so we update it. +* CIP->VIP will remain the same, so leave the tuple in +* IP_CT_DIR_ORIGINAL untouched. When the reply comes back from the +* real-server we will see RIP->DIP. +*/ + new_tuple = ct->tuplehash[IP_CT_DIR_REPLY ].tuple; + new_tuple.src.u3 = cp->daddr; +/* +* This will also take care of UDP and other protocols. +*/ + new_tuple.src.u.tcp.port = cp->dport; +nf_conntrack_alter_reply (ct, &new_tuple); +} +/* * NAT transmitter (only for outside-to-inside nat forwarding) * Not used for related ICMP
@@ -403,6 +428,8 @@ ip_vs_nat_xmit(struct sk_buff *skb, struIP_VS_DBG_PKT (10 , pp, skb,0 ,"After DNAT" ); +ip_vs_update_conntrack (skb, cp); +/* FIXME: when application helper enlarges the packet and the length is larger than the MTU of outgoing device, there will be still MTU problem. */
@@ -479,6 +506,8 @@ ip_vs_nat_xmit_v6(struct sk_buff *skb, sIP_VS_DBG_PKT (10 , pp, skb,0 ,"After DNAT" ); +ip_vs_update_conntrack (skb, cp); +/* FIXME: when application helper enlarges the packet and the length is larger than the MTU of outgoing device, there will be still MTU problem. */
Patrick McHardy
AppliedRe: [patch v2.8 2/4] IPVS: make friends with nf_conntrack
Am 22.07.2010 09:35, schrieb Simon Horman:
Quoted 7 lines
Update the
nf_conntracktuple in reply direction, as we will see traffic from the real server (RIP) to the client (CIP). Once this is done we can use netfilters SNAT in POSTROUTING, especially withxt_ipvs, to do source NAT, e.g.:% iptables -t nat -A POSTROUTING -m ipvs --vaddr 192.168.100.30/32 --vport 80 \
Quoted 1 line
Quoted 1 line
-j SNAT --to-source 192.168.10.10
Applied, thanks.
Simon Horman
maintainerPATCH 3/4 IPVS: make FTP work with full NAT support
In reply to Simon HormanFrom: Hannes Eder <[email protected]>
Use nf_conntrack/nf_nat code to do the packet mangling and the TCP sequence adjusting. The function 'ip_vs_skb_replace' is now dead code, so it is removed.
To SNAT FTP, use something like:
% iptables -t nat -A POSTROUTING -m ipvs --vaddr 192.168.100.30/32 \
Quoted 1 line
--vport 21 -j SNAT --to-source 192.168.10.10
and for the data connections in passive mode:
% iptables -t nat -A POSTROUTING -m ipvs --vaddr 192.168.100.30/32 \
Quoted 1 line
--vportctl 21 -j SNAT --to-source 192.168.10.10
using '-m state --state RELATED' would also works.
Make sure the kernel modules ip_vs_ftp, nf_conntrack_ftp, and nf_nat_ftp are loaded.
---
include/net/ip_vs.h | 2 net/netfilter/ipvs/Kconfig | 2 net/netfilter/ipvs/ip_vs_app.c | 43 --------- net/netfilter/ipvs/ip_vs_core.c | 1 net/netfilter/ipvs/ip_vs_ftp.c | 174 ++++++++++++++++++++++++++++++++++++--- 5 files changed, 164 insertions(+), 58 deletions(-)
v2.6
* pointer arguments for %pI4
v2.5
* Use nf_ct_is_untracked(ct) instead of nf_ct_is_untracked(), the latter is blatantly incorrect
* Return 0 (and thus drop the packet) if mangling wasn't attempted
v2.4
As suggested by Patrick McHardy
* Use nf_conntrack_untracked() instead of &nf_conntrack_untracked
* Fix ip_vs_ftp_out logic
- Don't call nf_nat_mangle_tcp_packet() unless ct is valid and tracked
- Only call ip_vs_expect_relatedi() if nf_nat_mangle_tcp_packet() succeeds
- Note that packets are dropped if mangling fails
Other
* Drop unrelated cosmetic change to sizing of buf in ip_vs_ftp_out()
v2.3
* Up-port
* Drop buf_len = snprintf() change - its a separate, cosmetic, fix As suggested by Patrick McHardy
* Use %pI4 instead of NIPQUAD
v2.2
* No change
v2.1
* Up-port
include/net/ip_vs.h +0 -2
@@ -736,8 +736,6 @@ extern void ip_vs_app_inc_put(struct ip_extern int ip_vs_app_pkt_out (struct ip_vs_conn *,struct sk_buff *skb);extern int ip_vs_app_pkt_in (struct ip_vs_conn *,struct sk_buff *skb); -extern int ip_vs_skb_replace (struct sk_buff *skb,gfp_t pri, -char *o_buf,int o_len,char *n_buf,int n_len);extern int ip_vs_app_init (void );extern void ip_vs_app_cleanup (void );
net/netfilter/ipvs/Kconfig +1 -1
@@ -235,7 +235,7 @@ comment 'IPVS application helper' config IP_VS_FTP tristate "FTP protocol helper" - depends on IP_VS_PROTO_TCP + depends on IP_VS_PROTO_TCP && NF_NAT ---help--- FTP is a protocol that transfers IP address and/or port number in the payload. In the virtual server via Network Address Translation,
net/netfilter/ipvs/ip_vs_app.c +0 -43
49 lines not on this page · raw message
net/netfilter/ipvs/ip_vs_core.c +0 -1
@@ -54,7 +54,6 @@EXPORT_SYMBOL (register_ip_vs_scheduler);EXPORT_SYMBOL (unregister_ip_vs_scheduler); -EXPORT_SYMBOL (ip_vs_skb_replace);EXPORT_SYMBOL (ip_vs_proto_name);EXPORT_SYMBOL (ip_vs_conn_new);EXPORT_SYMBOL (ip_vs_conn_in_get);
net/netfilter/ipvs/ip_vs_ftp.c +164 -12
226 lines not on this page · raw message
Patrick McHardy
AppliedRe: [patch v2.8 3/4] IPVS: make FTP work with full NAT support
Am 22.07.2010 09:35, schrieb Simon Horman:
Quoted 13 lines
From: Hannes Eder <[email protected]>
Use nf_conntrack/nf_nat code to do the packet mangling and the TCP sequence adjusting. The function '
ip_vs_skb_replace' is now dead code, so it is removed.To SNAT FTP, use something like:
% iptables -t nat -A POSTROUTING -m ipvs --vaddr 192.168.100.30/32 \
Quoted 1 line
--vport 21 -j SNAT --to-source 192.168.10.10
and for the data connections in passive mode:
Quoted 8 lines
% iptables -t nat -A POSTROUTING -m ipvs --vaddr 192.168.100.30/32 \
Quoted 1 line
--vportctl 21 -j SNAT --to-source 192.168.10.10
using '-m state --state RELATED' would also works.
Make sure the kernel modules
ip_vs_ftp,nf_conntrack_ftp, andnf_nat_ftpare loaded.
Applied, thanks.
Simon Horman
maintainerPATCH 4/4 libxt_ipvs: user-space lib for netfilter matcher xt_ipvs
In reply to Simon HormanFrom: Hannes Eder <[email protected]>
The user-space library for the netfilter matcher xt_ipvs.
configure.ac | 10 - extensions/libxt_ipvs.c | 365 +++++++++++++++++++++++++++++++++++++ extensions/libxt_ipvs.man | 24 ++ include/linux/netfilter/xt_ipvs.h | 27 +++ 4 files changed, 424 insertions(+), 2 deletions(-) create mode 100644 extensions/libxt_ipvs.c create mode 100644 extensions/libxt_ipvs.man create mode 100644 include/linux/netfilter/xt_ipvs.h
v2.8
* There is no need to define _XT_IPVS_H as a value As suggested by Jan Engelhardt
* Use an enum instead of #ifdefs for flags and masks
v2.7
* Update struct xt_ipvs_mtinfo to use __u8 instead of __16 for the l4proto and fwd_method to reflect the same change to the kernel copy of struct xt_ipvs_mtinfo.
v2.1
* Trival up-port
configure.ac +8 -2
@@ -52,12 +52,18 @@ AC_ARG_WITH([pkgconfigdir], AS_HELP_STRI [Path to the pkgconfig directory [[LIBDIR/pkgconfig]]]), [pkgconfigdir="$withval"], [pkgconfigdir='${libdir}/pkgconfig']) -AC_CHECK_HEADER([linux/dccp.h]) - blacklist_modules=""; + +AC_CHECK_HEADER([linux/dccp.h]) if test "$ac_cv_header_linux_dccp_h" != "yes"; then blacklist_modules="$blacklist_modules dccp"; fi; + +AC_CHECK_HEADER([linux/ip_vs.h]) +if test "$ac_cv_header_linux_ip_vs_h" != "yes"; then + blacklist_modules="$blacklist_modules ipvs"; +fi; + AC_SUBST([blacklist_modules]) AM_CONDITIONAL([ENABLE_STATIC], [test "$enable_static" = "yes"])
extensions/libxt_ipvs.c new file +365 -0
365 lines not on this page · raw message
extensions/libxt_ipvs.man new file +24 -0
@@ -0,0 +1,24 @@ +Match IPVS connection properties. +.TP +[\fB!\fR] \fB\-\-ipvs\fP +packet belongs to an IPVS connection +.TP +Any of the following options implies \-\-ipvs (even negated) +.TP +[\fB!\fR] \fB\-\-vproto\fP \fIprotocol\fP +VIP protocol to match; by number or name, e.g. "tcp" +.TP +[\fB!\fR] \fB\-\-vaddr\fP \fIaddress\fP[\fB/\fP\fImask\fP] +VIP address to match +.TP +[\fB!\fR] \fB\-\-vport\fP \fIport\fP +VIP port to match; by number or name, e.g. "http" +.TP +\fB\-\-vdir\fP {\fBORIGINAL\fP|\fBREPLY\fP} +flow direction of packet +.TP +[\fB!\fR] \fB\-\-vmethod\fP {\fBGATE\fP|\fBIPIP\fP|\fBMASQ\fP} +IPVS forwarding method used +.TP +[\fB!\fR] \fB\-\-vportctl\fP \fIport\fP +VIP port of the controlling connection to match, e.g. 21 for FTP
include/linux/netfilter/xt_ipvs.h new file +27 -0
@@ -0,0 +1,27 @@ +#ifndef _XT_IPVS_H +#define _XT_IPVS_H + +enum { +XT_IPVS_IPVS_PROPERTY =1 <<0 ,/* all other options imply this one */ +XT_IPVS_PROTO =1 <<1 , +XT_IPVS_VADDR =1 <<2 , +XT_IPVS_VPORT =1 <<3 , +XT_IPVS_DIR =1 <<4 , +XT_IPVS_METHOD =1 <<5 , +XT_IPVS_VPORTCTL =1 <<6 , +XT_IPVS_MASK = (1 <<7 ) -1 , +XT_IPVS_ONCE_MASK =XT_IPVS_MASK & ~XT_IPVS_IPVS_PROPERTY +}; + +struct xt_ipvs_mtinfo { +union nf_inet_addr vaddr, vmask; +__be16 vport; +__u8 l4proto; +__u8 fwd_method; +__be16 vportctl; + +__u8 invert; +__u8 bitmask; +}; + +#endif /* _XT_IPVS_H */
Patrick McHardy
AppliedRe: [patch v2.8 4/4] [patch v2.2 4/4] [PATCH v2.1 4/4] libxt_ipvs: user-space lib for netfilter matcher xt_ipvs
Am 22.07.2010 09:35, schrieb Simon Horman:
Quoted 4 lines
From: Hannes Eder <[email protected]>
The user-space library for the netfilter matcher
xt_ipvs.
Applied to the iptables-next branch, thanks.