这是我的设置。我有一台 Cisco ASA 5505(最新 IOS)。在它后面,我有一台(Ubuntu 12.04)服务器,运行 nginx、php-fpm、OwnCloud(所有最新版本)。我的台式机也位于 ASA 后面,可以正常访问 OwnCloud。如果我将我的 Android 平板电脑连接到我们的无线接入点,然后访问 OwnCloud Web 界面,一切都会正常进行。
我在 ASA 上设置了 L2TP/IPSEC VPN。我可以断开台式机上的以太网,绑定到手机,然后连接到 VPN。从那里,我可以通过 SSH 进入 nginx 服务器,通过 VNC 进入其他台式机,并访问 OwnCloud Web 界面。一切都很完美。
我可以将 Android 平板电脑连接到 VPN(通过热点网络共享)。从那里,我可以通过 SSH 进入 nginx 服务器,通过 VNC 进入台式机。当我尝试访问 OwnCloud Web 界面时,问题出现了。它不起作用。它只是在那里旋转。奇怪的是,我在 OwnCloud 目录中创建了一个 test.php 文件(带有一个简单的echo('hello world');
),该页面加载得很好。
我使用 tcpdump 捕获了服务器上的流量,可以看到 GET 请求已进入。服务器做出响应。然后我看到平板电脑发出几个重复的 ACKS,服务器发出几个重传。
我应该注意到 VPN 客户端被赋予了不同子网上的 IP 地址。
这是我的 nginx 配置:
upstream php-handler {
server 127.0.0.1:9000;
}
# redirect http to https
server {
listen 80;
server_name 10.3.3.3;
#return 301 https://$server_name$request_uri; # enforce https
root /var/www/owncloud/;
client_max_body_size 10G;
client_body_timeout 600s;
client_header_timeout 600s;
rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
index index.php;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
deny all;
}
location / {
# The following 2 rules are only needed with webfinger
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
try_files $uri $uri/ index.php;
}
location ~ ^(.+?\.php)(/.*)?$ {
try_files $1 = 404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$1;
fastcgi_param PATH_INFO $2;
fastcgi_param HTTPS off;
fastcgi_pass php-handler;
}
# Optional: set long EXPIRES header on static assets
location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires 30d;
# Optional: Don't log access to assets
access_log off;
}
}
总之,所有设备在本地 LAN 上工作正常。桌面客户端 (OS X) 通过 VPN 连接时工作正常。VPN 移动客户端 (Android 平板电脑) 可以通过 SSH 和 VNC 连接到本地计算机。在我的简单测试页面上,HTTP 请求对于 VPN 也工作正常,但无法访问 OwnCloud。我该怎么做才能进一步诊断问题?问题是什么?
答案1
您需要一个 NAT 盒,其中包含本地网络的 DNS 记录。这将使您的虚拟主机更易于使用、更详细,并且在本地和远程网络之间更加一致...
拥有一个专用于 Owncloud 的域名真是太好了。拥有与隐藏的 Owncloud 相同的域名真是太好了。当您接入 VPN 时,只要您的路由允许访问您的本地子网,它就应该可以正常工作。
我的所有机器或 VM 站点都有自己独特的 DNS 记录和静态 IP。这是一个额外的步骤,但组织起来更专业。