我有一台Linux机器,有2个网络连接,wlan0和eth0。通过wlan0,Linux机器连接到路由器,通过eth0,Linux机器连接到IP摄像机(通过网络交换机)。
从与 wlan0 位于同一网络上的 Windows 计算机,我使用 putty 连接到 Linux 计算机。如何通过通过 wlan0 连接的 Windows 计算机连接到 eth0 上的 ipcamera?
我的 Linux 机器的 IP,通过 wlan0 连接是 192.168.100.10(网关:192.168.100.1)
IP摄像机的IP,通过eth0连接到linux机器,使用交换机,是192.168.1.10(网关192.168.1.1)
当我在我的 Linux 机器上时,我可以连接到 wlan0 和 eth0,并访问 IP 摄像头,但是当我尝试通过连接到与 wlan0 同一路由器的 Windows PC 连接到 eth0 时,我无法连接到 eth0。
我如何将 IP 摄像机 eth0 连接转发到我的 wlan0 连接,以便我可以从 Windows PC 访问它?
我已启用 IP 转发。
这是我的接口配置:
# Local loopback
auto lo
iface lo inet loopback
#Wireless
#Uplink1 Wireless
auto wlan0
iface wlan0 inet static
wpa-ssid wifi
w8a-psk 90509d8a2bcd0893a2b873e5d9ba9c96ec686ce2b90e3252eab680fdef1c6125
address 192.168.100.10
netmask 255.255.255.0
gateway 192.168.100.1
post-up ip route add 192.168.100.0/24 dev wlan0 table uplink1
post-up ip route add default via 192.168.100.1 table uplink1
post-up ip rule add from 192.168.100.10/32 table uplink1 priority 100
post-up ip route flush cache
pre-down ip rule del from 192.168.100.10/32 table uplink1 priority 100
pre-down ip route flush table uplink1
pre-down ip route flush cache
#Uplink2
auto eth0
iface eth0 inet static
address 192.168.1.118
netmask 255.255.255.0
#gateway 192.168.1.1
post-up ip route add 192.168.1.0/24 dev eth0 table uplink2
post-up ip route add default via 192.168.1.1 table uplink2
post-up ip rule add from 192.168.1.118/32 table uplink2 priority 110
post-up ip route flush cache
pre-down ip rule del from 192.168.1.118/32 table uplink2 priority 110
pre-down ip route flush table uplink2
pre-down ip route flush cache
ifconfig 的输出是:
eth0 Link encap:Ethernet HWaddr 02:41:06:40:b3:e9
inet addr:192.168.1.118 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::41:6ff:fe40:b3e9/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1064 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:63840 (62.3 KiB) TX bytes:558 (558.0 B)
Interrupt:46
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:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wlan0 Link encap:Ethernet HWaddr 00:a1:b0:f0:63:e4
inet addr:192.168.100.10 Bcast:192.168.100.255 Mask:255.255.255.0
inet6 addr: fe80::2a1:b0ff:fef0:63e4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1369 errors:0 dropped:0 overruns:0 frame:0
TX packets:790 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:126212 (123.2 KiB) TX bytes:102124 (99.7 KiB)
路线的输出是:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.100.1 0.0.0.0 UG 0 0 0 wlan0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
192.168.100.0 * 255.255.255.0 U 0 0 0 wlan0
我已经尝试通过 iptables 进行 IP 转发,但没有任何结果。我试过:iptables -t nat -A PREROUTING -p tcp -d 192.168.1.10 --dport 80 -j DNAT --to 192.168.100.10:80
和iptables -A FORWARD -p tcp -d 192.168.100.10 --dport 80 -j ACCEPT
我也试过iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.100.10:80
但我仍然无法在 Windows PC 上访问 192.168.1.10。我输入了 URL 192.168.100.10,因为我是通过 wlan0 连接到它的,然后我尝试将 IP 摄像头连接转发到该 URL。
答案1
当您的 Windows 计算机查询 192.168.1.10 时,其路由表类似于:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.100.1 0.0.0.0 UG 0 0 0 wlan0
192.168.100.0 * 255.255.255.0 U 0 0 0 wlan0
因此,所有流量都将通过路由器。您的路由器无法感知 Linux 机器的 eth0 端口或您在该机器上创建的网络。您必须指示路由器将块路由192.168.1.*
到您的 Linux 机器。这取决于您的路由器,可能可行也可能不可行。
答案2
尝试了很多方法后,我终于成功了。
这是我所做的,将 eth0 上的 IP 摄像机的 IP 转发到我的 wlan0 连接,我可以从我的 Windows 或互联网上的任何 PC 访问它。
因此我补充道:
iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 8080 -j DNAT --to 192.168.1.10:80
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.10 --dport 80 -j MASQUERADE
现在一切正常。我的相机的 IP(eth0 上的 192.168.1.10:80)被转发到 Linux 机器上的另一个连接的 IP(wlan0 上的 192.168.100.10:8080)。
所以现在,当我在 Windows PC 上连接到与 wlan0 连接相同的路由器时,当我写入 192.168.100.10:8080 时,它会显示我的 IP 摄像机在 192.168.1.10 上的登录页面。