由于我们的位置非常偏远,而且预算有限,我的互联网连接仅限于蜂窝 3G/EDGE。服务提供商没有为我提供公共 IP 的选项,因此我们设法通过 VPN 运行我的 Linux 服务器,并使用专用 IP 隧道来解决这个问题。另一个(暂时的)复杂因素是它是一台虚拟机 VMWare,很快就会被物理机器取代。
目前,我已成功在此服务器上运行了几个 GPS 追踪器,它们能够通过 VPN 设置的隧道 tun0 通过公共 IP 访问服务器。我还可以从互联网访问位于本地网络中的其他几个 IP 设备,因此设置确实有效。
我需要设置一个 TCP 套接字,以便获取来自另一台设备的数据。我运行$ ncat -l -k -p 8993
并$ netstat -l
显示它确实在监听该端口。
tcp 0 0 *:8993 *:* LISTEN
tcp6 0 0 [::]:8993 [::]:* LISTEN
结果是,当我从本地网络 (192.168.0.113) 内通过本地适配器 eth0 访问服务器时,我可以使用 telnet 连接到此套接字,但我无法使用公共 IP (tun0) 连接到它。canyouseeme.org 还显示该端口已关闭。我在 iptables 中有以下行:
iptables -A FORWARD -i tun0 -o eth0 -p tcp --syn --dport 8993 -m conntrack --ctstate NEW -j ACCEPT
我还输入了以下几行来查看是否有助于解决任何问题,但到目前为止没有任何效果。
iptables -A FORWARD -i tun0 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
我知道我这里漏掉了一些小东西,因为我的其他设备从公共端访问服务器没有任何问题。任何帮助都将不胜感激。
这表明$ ifconfig
:
eth0 Link encap:Ethernet HWaddr 00:0c:29:45:c6:83
inet addr:192.168.0.113 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe45:c683/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11019 errors:0 dropped:0 overruns:0 frame:0
TX packets:6309 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5882474 (5.6 MiB) TX bytes:1197497 (1.1 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:120 errors:0 dropped:0 overruns:0 frame:0
TX packets:120 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:8069 (7.8 KiB) TX bytes:8069 (7.8 KiB)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.212.0.6 P-t-P:10.212.0.5 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:4206 errors:0 dropped:0 overruns:0 frame:0
TX packets:3948 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:3528488 (3.3 MiB) TX bytes:392464 (383.2 KiB)