由於我們的位置非常偏遠且預算有限,我的網路連線僅限於蜂窩 3G/EDGE。服務提供者無法為我提供公共 IP,因此我們設法透過 VPN 運行我的 Linux 伺服器(並使用通往專用 IP 的隧道)來解決此問題。一個額外的(暫時的)複雜性是它是虛擬機器 VMWare,很快就會被實體機取代。
目前我在這台伺服器上成功運行了幾個 GPS 追蹤器,它們能夠透過 tun0(VPN 設定的隧道)透過公共 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)