恐怕这将是一个相当开放式的问题,但我觉得我应该在这里问这个问题,因为我花了几个星期的时间在这个问题上却毫无结果。我将添加我尝试过的内容,希望我们能缩小范围。
我在桌面上运行 Arch Linux,并希望在其上运行 Web 服务器来为本地网络提供服务。我尝试过一些常见的网络服务,但没有任何效果,除了......
SSH 有效。我添加了接受 22 端口传入连接的规则,启动了 sshd 服务,并且它可靠地工作。为了进行调试,我关闭了 22 端口,这会禁用远程主机的连接,因此防火墙显然正在工作。这是我当前的防火墙配置:
sudo iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3838
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:4999
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2121
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
DROP all -- 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8 ctstate NEW
UDP udp -- 0.0.0.0/0 0.0.0.0/0 ctstate NEW
TCP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x02 ctstate NEW
REJECT udp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-proto-unreachable
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain TCP (1 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3838
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:4999
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
Chain UDP (1 references)
target prot opt source destination
这是我的网络设备配置:
ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether e0:d5:5e:23:ee:3f brd ff:ff:ff:ff:ff:ff
3: enp0s31f6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether e0:d5:5e:23:ee:3d brd ff:ff:ff:ff:ff:ff
4: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 9c:b6:d0:1d:f7:97 brd ff:ff:ff:ff:ff:ff
inet 192.168.30.123/24 brd 192.168.30.255 scope global dynamic noprefixroute wlp2s0
valid_lft 406681sec preferred_lft 406681sec
inet6 fe80::5dfe:2375:7e24:d383/64 scope link noprefixroute
valid_lft forever preferred_lft forever
然后我用这个配置(摘录)启动 nginx(我尝试过不同的网络服务器,如果你想让我尝试一些特别的东西,请评论):
/etc/nginx/nginx.conf
server {
listen 80;
server_name 0.0.0.0;
server_name 192.168.30.123;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
ss -tulnp
显示这个:
NetidState Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 192.168.30.123%wlp2s0:68 0.0.0.0:*
udp UNCONN 0 0 192.168.30.123:123 0.0.0.0:*
udp UNCONN 0 0 127.0.0.1:123 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:123 0.0.0.0:*
udp UNCONN 0 0 [fe80::5dfe:2375:7e24:d383]%wlp2s0:123 [::]:*
udp UNCONN 0 0 [::1]:123 [::]:*
udp UNCONN 0 0 [::]:123 [::]:*
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 5 127.0.0.1:631 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:4999 0.0.0.0:* users:(("R",pid=13147,fd=10))
tcp LISTEN 0 128 [::]:22 [::]:*
tcp LISTEN 0 5 [::1]:631 [::]:*
tcp LISTEN 0 128 *:3838 *:*
所以对我来说,这看起来端口是开放的并且有东西在监听它们。示例页面提供给本地主机,但不是来自 LAN。我在同一无线局域网上的笔记本电脑上设置了一个类似的服务器,它服务于整个局域网(包括有问题的机器),所以我认为这意味着网络本身是好的。我也使用 tcpdump 进行了测试(即 tcpdump 在有问题的机器上运行):
sudo tcpdump port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:22:56.156589 IP 192.168.30.132.51764 > s-l.http: Flags [S], seq 1909655952, win 29200, options [mss 1460,sackOK,TS val 4135754645 ecr 0,nop,wscale 7], length 0
16:22:58.717288 IP 192.168.30.132.51766 > s-l.http: Flags [S], seq 16903 94439, win 29200, options [mss 1460,sackOK,TS val 4135757197 ecr 0,nop,wscale 7], length 0
16:23:00.183474 IP 192.168.30.132.51768 > s-l.http: Flags [S], seq 872524670, win 29200, options [mss 1460,sackOK,TS val 4135758723 ecr 0,nop,wscale 7], length 0
16:23:00.970190 IP 192.168.30.132.51770 > s-l.http: Flags [S], seq 3470413477, win 29200, options [mss 1460,sackOK,TS val 4135759430 ecr 0,nop,wscale 7], length 0
这是我笔记本电脑上的四次刷新。这真的让我很沮丧,因为包裹似乎已经到达,但没有任何回应。
编辑:我已经尝试runApp(".", host="0.0.0.0" , port=4999)
过闪亮,但它仍然只服务于本地主机。但它仍然无法解释 nginx。 (这是针对不同的网络服务器的)。
答案1
虽然我没有使用shiny的经验,但是你尝试过绑定到网络接口的实际地址吗?获得与ifconfig -a
.
您已经尝试过类似的操作:
runApp(".", host="0.0.0.0" , port=4999)
但尝试这样的事情:
runApp(".", host="<if_ip>” , port=3838)
另外,端口 4999 也无法工作,因为您没有在上述配置中打开该端口iptables
。