#537 NAT rules with sticky have incorrect hostmap IP address
This commit is contained in:
parent
b816f84312
commit
17a9965ed4
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ip_nat.c,v 1.11 2014/02/27 01:40:07 joerg Exp $ */
|
||||
/* $NetBSD: ip_nat.c,v 1.12 2014/06/28 08:02:09 darrenr Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2012 by Darren Reed.
|
||||
|
@ -113,7 +113,7 @@ extern struct ifnet vpnif;
|
|||
#if !defined(lint)
|
||||
#if defined(__NetBSD__)
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: ip_nat.c,v 1.11 2014/02/27 01:40:07 joerg Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: ip_nat.c,v 1.12 2014/06/28 08:02:09 darrenr Exp $");
|
||||
#else
|
||||
static const char sccsid[] = "@(#)ip_nat.c 1.11 6/5/96 (C) 1995 Darren Reed";
|
||||
static const char rcsid[] = "@(#)Id: ip_nat.c,v 1.1.1.2 2012/07/22 13:45:27 darrenr Exp";
|
||||
|
@ -2894,10 +2894,11 @@ ipf_nat_newrdr(fr_info_t *fin, nat_t *nat, natinfo_t *ni)
|
|||
*/
|
||||
if (np->in_flags & IPN_SPLIT) {
|
||||
in.s_addr = np->in_dnip;
|
||||
inb.s_addr = htonl(in.s_addr);
|
||||
|
||||
if ((np->in_flags & (IPN_ROUNDR|IPN_STICKY)) == IPN_STICKY) {
|
||||
hm = ipf_nat_hostmap(softn, NULL, fin->fin_src,
|
||||
fin->fin_dst, in, (u_32_t)dport);
|
||||
fin->fin_dst, inb, (u_32_t)dport);
|
||||
if (hm != NULL) {
|
||||
in.s_addr = hm->hm_ndstip.s_addr;
|
||||
move = 0;
|
||||
|
@ -3004,7 +3005,7 @@ ipf_nat_newrdr(fr_info_t *fin, nat_t *nat, natinfo_t *ni)
|
|||
nat->nat_osrcip = fin->fin_src;
|
||||
if ((nat->nat_hm == NULL) && ((np->in_flags & IPN_STICKY) != 0))
|
||||
nat->nat_hm = ipf_nat_hostmap(softn, np, fin->fin_src,
|
||||
fin->fin_dst, in, (u_32_t)dport);
|
||||
fin->fin_dst, inb, (u_32_t)dport);
|
||||
|
||||
if (flags & IPN_TCPUDP) {
|
||||
nat->nat_odport = dport;
|
||||
|
|
Loading…
Reference in New Issue