|
|
- commit cb046cfef1d6b954d3fc09f09a1fc3a7ffeb7593
- Author: Chen Minqiang <ptpt52@gmail.com>
- Date: Sun Jul 5 10:42:52 2020 +0800
-
- options: ext_ip_reserved_ignore support
-
- This make the port forwarding force to work even
- when the router is behind NAT
-
- Signed-off-by: Chen Minqiang <ptpt52@gmail.com>
-
- diff --git a/getifaddr.c b/getifaddr.c
- index 7c09064..46cae8c 100644
- --- a/getifaddr.c
- +++ b/getifaddr.c
- @@ -25,6 +25,7 @@
- #if defined(USE_GETIFADDRS) || defined(ENABLE_IPV6) || defined(ENABLE_PCP)
- #include <ifaddrs.h>
- #endif
- +#include "upnpglobalvars.h"
-
- int
- getifaddr(const char * ifname, char * buf, int len,
- @@ -295,6 +296,11 @@ addr_is_reserved(struct in_addr * addr)
- uint32_t address = ntohl(addr->s_addr);
- size_t i;
-
- + if(GETFLAG(EXTIPRESERVEDIGNOREMASK)) {
- + syslog(LOG_NOTICE, "private/reserved address checking is ignore");
- + return 0;
- + }
- +
- for (i = 0; i < sizeof(reserved)/sizeof(reserved[0]); ++i) {
- if ((address >> reserved[i].rmask) == (reserved[i].address >> reserved[i].rmask))
- return 1;
- diff --git a/miniupnpd.c b/miniupnpd.c
- index e9f9f61..86b4200 100644
- --- a/miniupnpd.c
- +++ b/miniupnpd.c
- @@ -1225,6 +1225,10 @@ init(int argc, char * * argv, struct runtime_vars * v)
- case UPNPEXT_IP:
- use_ext_ip_addr = ary_options[i].value;
- break;
- + case UPNPEXT_IP_RESERVED_IGNORE:
- + if(strcmp(ary_options[i].value, "yes") == 0)
- + SETFLAG(EXTIPRESERVEDIGNOREMASK);
- + break;
- case UPNPEXT_PERFORM_STUN:
- if(strcmp(ary_options[i].value, "yes") == 0)
- SETFLAG(PERFORMSTUNMASK);
- diff --git a/miniupnpd.conf b/miniupnpd.conf
- index 6274f67..c614192 100644
- --- a/miniupnpd.conf
- +++ b/miniupnpd.conf
- @@ -9,6 +9,8 @@
- # Setting ext_ip is also useful in double NAT setup, you can declare here
- # the public IP address.
- #ext_ip=
- +#ignore even if ext_ip is reserved: default is no
- +#ext_ip_reserved_ignore=yes
- # WAN interface must have public IP address. Otherwise it is behind NAT
- # and port forwarding is impossible. In some cases WAN interface can be
- # behind unrestricted NAT 1:1 when all incoming traffic is NAT-ed and
- diff --git a/options.c b/options.c
- index 05fa317..3711094 100644
- --- a/options.c
- +++ b/options.c
- @@ -34,6 +34,7 @@ static const struct {
- { UPNPEXT_IFNAME6, "ext_ifname6" },
- #endif
- { UPNPEXT_IP, "ext_ip" },
- + { UPNPEXT_IP_RESERVED_IGNORE, "ext_ip_reserved_ignore" },
- { UPNPEXT_PERFORM_STUN, "ext_perform_stun" },
- { UPNPEXT_STUN_HOST, "ext_stun_host" },
- { UPNPEXT_STUN_PORT, "ext_stun_port" },
- diff --git a/options.h b/options.h
- index 96cdbbf..34c698f 100644
- --- a/options.h
- +++ b/options.h
- @@ -21,6 +21,7 @@ enum upnpconfigoptions {
- UPNPEXT_IFNAME6, /* ext_ifname6 */
- #endif
- UPNPEXT_IP, /* ext_ip */
- + UPNPEXT_IP_RESERVED_IGNORE, /* ignore if ext_ip is reserved */
- UPNPEXT_PERFORM_STUN, /* ext_perform_stun */
- UPNPEXT_STUN_HOST, /* ext_stun_host */
- UPNPEXT_STUN_PORT, /* ext_stun_port */
- diff --git a/testgetifaddr.c b/testgetifaddr.c
- index 8045b89..b5cdbb4 100644
- --- a/testgetifaddr.c
- +++ b/testgetifaddr.c
- @@ -13,6 +13,8 @@
- #include "config.h"
- #include "getifaddr.h"
-
- +int runtime_flags = 0;
- +
- #if defined(__sun)
- /* solaris 10 does not define LOG_PERROR */
- #define LOG_PERROR 0
- diff --git a/testportinuse.c b/testportinuse.c
- index 98574c6..507f830 100644
- --- a/testportinuse.c
- +++ b/testportinuse.c
- @@ -14,6 +14,8 @@
- #include "config.h"
- #include "portinuse.h"
-
- +int runtime_flags = 0;
- +
- int main(int argc, char * * argv)
- {
- #ifndef CHECK_PORTINUSE
- diff --git a/upnpglobalvars.h b/upnpglobalvars.h
- index a474353..4f5bbdd 100644
- --- a/upnpglobalvars.h
- +++ b/upnpglobalvars.h
- @@ -84,6 +84,8 @@ extern int runtime_flags;
-
- #define PERFORMSTUNMASK 0x1000
-
- +#define EXTIPRESERVEDIGNOREMASK 0x2000
- +
- #define SETFLAG(mask) runtime_flags |= mask
- #define GETFLAG(mask) (runtime_flags & mask)
- #define CLEARFLAG(mask) runtime_flags &= ~mask
|