运行 DNS 服务器规避 NAT-环回问题

Running DNS Server to circumvent NAT-Loopback issue

首先我想说的是,我可能阅读了互联网上有关该问题的所有内容。

问题是如果我在同一网络中,我无法通过 doc.selfhost.eu 访问我自己的云。但我可以通过其内部 IP (192.168.2.200) 从网络内部访问它,也可以通过 doc.selfhost.eu.

从网络外部访问它

我的设置: 家庭服务器 运行ning Linux Mint 17.2 Cinnamon,应该用于媒体和 运行 owncloud。

服务器连接到不支持 NAT 环回的 Speedport 723v。端口 80 和 443 被转发,对于动态 DNS,我在 selfhost.de 上有一个帐户,我在路由器设置中输入了该帐户。

在我的 Windows 7 机器上(我试图从中访问服务器)我输入 192.168.2.200(服务器内部 IP)作为 DNS。

在 Mint 中,我禁用了网络管理器(实际上我删除了它),现在我正在使用接口。

没有解决方案是更改所有客户端的主机文件(在无根机器人上,这甚至不可能)。

问题:

  1. 我需要更改什么才能通过外部 IP 从内部网络访问我的 owncloud?

  2. 是否可以完全不配置客户端?这意味着无需输入服务器 DNS 或更改客户端中的主机即可使其正常工作。 在下面你可以看到我摆弄过的所有文件,我认为可能是相关的。

/etc/network/interfaces

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.2.200
netmask 255.255.255.0
gateway 192.168.2.1
dns-nameservers doc.selfhost.eu 8.8.8.8

/etc/resolv.conf

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1

/etc/dnsmasq.conf 中,这是我唯一添加的内容:

listen-address=127.0.0.1
listen-address=192.168.2.200
address=/doc.selfhost.eu/192.168.2.200

/etc/dnsmasq.d/doc.selfhost.eu(在某处阅读以创建此内容)

address=/doc.selfhost.eu/192.168.2.200

/etc/hosts

127.0.0.1       localhost
127.0.1.1       doc-desktop
192.168.2.200   doc.selfhost.eu

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Owncloud 设置在 /var/www/owncloud/config/config.php

'trusted_domains' =>
  array (
0 => '192.168.2.200',
1 => 'doc.selfhost.eu',
  );

Apache 配置 在 /etc/apache2/apache2.conf 中,一切都非常标准。我只添加了:

ServerName doc-desktop

/etc/apache2/sites-enabled/owncloud.conf可用站点没有变化,没有链接。

<VirtualHost 192.168.2.200:80>

#### Redirect to port 443 ###
RewriteEngine on
ReWriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/ [NC,R,L]
#### End of Redirection configuration ###

DocumentRoot /var/www/owncloud/
<Directory /var/www/owncloud>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
</Directory>

</VirtualHost>

<VirtualHost 192.168.2.200:443>
####Configuration for SSL #####
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
#### End of SSL Configuration ####
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
DocumentRoot /var/www/owncloud/
<Directory /var/www/owncloud>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
</Directory>
</VirtualHost>

以防万一。 来自服务器:

dig doc.selfhost.eu

; <<>> DiG 9.9.5-3ubuntu0.5-Ubuntu <<>> doc.selfhost.eu
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49046
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;doc.selfhost.eu.          IN      A

;; ANSWER SECTION:
doc.selfhost.eu.   0       IN      A       192.168.2.200

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Oct 26 02:35:15 CET 2015
;; MSG SIZE  rcvd: 54

来自网络内部的客户端(使用 cygwin):

dig doc.selfhost.eu

; <<>> DiG 9.10.3 <<>> doc.selfhost.eu
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29482
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;doc.selfhost.eu.          IN      A

;; ANSWER SECTION:
doc.selfhost.eu.   0       IN      A       192.168.2.200

;; Query time: 31 msec
;; SERVER: 192.168.2.200#53(192.168.2.200)
;; WHEN: Mon Oct 26 02:37:32     2015
;; MSG SIZE  rcvd: 54

我希望这就是一切。 谢谢。

... which doesn't support NAT Loopback. .... What would I have to change to access my owncloud from the internal network over the external IP?

如果您坚持从内部使用外部 IP 地址,那么您必须将路由器替换为支持 NAT 环回(NAT 发夹或 NAT 反射或任何您称之为的任何东西)的型号。没有办法,因为与外部 IP 地址的连接将通过路由器。

Is it possible to not configure the clients at all? Meaning no entering the servers DNS or changing hosts in the clients for it to work properly. ..

您可以尝试 运行 您自己的 DNS 服务器,并通过 DHCP 告诉客户端使用此 DNS 服务器。该 DNS 服务器然后可以提供您的家庭服务器的内部 IP。我怀疑这是否可以在路由器本身上完成,但您可能 运行 在您的家庭服务器上使用 DNS 和 DHCP,并在路由器上禁用 DHCP。

有关如何设置 DNS 和 DHCP 的具体问题,请转至 superuser.com or serverfault.com,因为这是题外话。