forked from openwrt/packages
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
net/miniupnpd: ext_ip_reserved_ignore support
This add an option to ignore ext_ip reserved Enable this option in config by default. Fixes: openwrt#13773 Signed-off-by: Chen Minqiang <ptpt52@gmail.com>
- Loading branch information
Showing
4 changed files
with
131 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
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 |