Как и вся безопасность, она бесполезна сама по себе. Если вам нужно разместить его на общедоступном веб-сервере, используйте белый список IP, с базовым именем пользователя / паролем auth, с SSL, с достойная настройка мониторинга, с обновленным серверным приложением.
Таким образом, в чем смысл публичного доступа к серверу, а затем ограничивать его только внутренними IP-адреса? Похоже, что это в основном переосмысление того, что NAT дает вам бесплатно, и с сервером только для внутреннего использования, а также вам приходится беспокоиться о эксплойтах веб-сервера и подобных.
Кажется, вы ничего не получаете благодаря тому, что он доступен извне, и есть много преимуществ в том, что он имеет внутреннее единство.
Вы можете попробовать это для присоединения, которое, я думаю, является вашей проблемой:
library(data.table)
dt.1 <- data.table(id = 1:10,
x1 = LETTERS[1:10])
dt.1
id x1
1: 1 A
2: 2 B
3: 3 C
4: 4 D
5: 5 E
6: 6 F
7: 7 G
8: 8 H
9: 9 I
10: 10 J
dt.2 <- data.table(id = seq(from = 2, to = 20, by = 2),
lat = seq(from = -5, to = -12.5, length.out = 10),
lng = seq(from = 3, to = 4.3, length.out = 10))
dt.2
id lat lng
1: 2 -5.000000 3.000000
2: 4 -5.833333 3.144444
3: 6 -6.666667 3.288889
4: 8 -7.500000 3.433333
5: 10 -8.333333 3.577778
6: 12 -9.166667 3.722222
7: 14 -10.000000 3.866667
8: 16 -10.833333 4.011111
9: 18 -11.666667 4.155556
10: 20 -12.500000 4.300000
setkey(dt.1, id)
setkey(dt.2, id)
dt.merge <- dt.1[dt.2]
dt.merge
id x1 lat lng
1: 2 B -5.000000 3.000000
2: 4 D -5.833333 3.144444
3: 6 F -6.666667 3.288889
4: 8 H -7.500000 3.433333
5: 10 J -8.333333 3.577778
6: 12 <NA> -9.166667 3.722222
7: 14 <NA> -10.000000 3.866667
8: 16 <NA> -10.833333 4.011111
9: 18 <NA> -11.666667 4.155556
10: 20 <NA> -12.500000 4.300000
dt.merge[complete.cases(dt.merge)]
id x1 lat lng
1: 2 B -5.000000 3.000000
2: 4 D -5.833333 3.144444
3: 6 F -6.666667 3.288889
4: 8 H -7.500000 3.433333
5: 10 J -8.333333 3.577778