我有三台 ubuntu maverick 机器和一个接入点。我希望能够设置以下场景:
设置如下:
- 192.168.0.1 是一个接入点
- 192.168.0.2 是笔记本电脑与接入点的无线连接
- 192.168.0.3 是计算机 2 到接入点的无线连接
- 192.168.0.4 是计算机 1 到计算机 2 的有线连接
- 192.168.0.5 是计算机 2 到计算机 1 的有线连接
- 123.45.67.89 是计算机 2 到互联网的有线连接
- 123.1.1.1 是互联网网关
在这张图片中,我希望能够做的事情是:
- 从笔记本电脑 ssh 到计算机 1(无需先 ssh 到计算机 2)
- 从计算机 1 访问互联网(大概通过计算机 2)
我以为我可以在计算机 2 上桥接有线和无线连接,这样所有 192.168.0.* 接口看起来都会在同一个子网上,而且看起来都可以直接相互访问,但是我整天都在玩 brctl(bridge-utils)和 /etc/network/interfaces,却没能让它工作。
至于通过计算机 2 从计算机 1 访问互联网,我确信我可以按照以下方法在计算机 2 上设置 NAT 和 IP 转发这些说明(我以前也这样做过。)但是我在桥上遇到困难了,没有再进一步尝试。
答案1
最有可能的问题是,computer2上的无线接口不支持桥接。这里对可能的原因进行了解释。
这是一个众所周知的问题,在很多情况下,Linux 无法提供解决方案(事实上,它甚至不太可能在 Windows 中起作用)。
但是,还有其他解决方案。它们涉及使用单独的网络段和一些路由,但它们会满足您的要求。本质上,您需要将 computer2 设置为路由器。为了使其正常工作,我建议在有线和无线网络段上使用单独的子网。
编辑:在上面的图表中添加子网以显示解决方案,以及用于配置网络的启动脚本。脚本还允许通过计算机 2 上的 NAT 从计算机 1 访问互联网。
#!/bin/bash
PATH=/usr/sbin:/sbin:/bin:/usr/bin
WAN=wlan0
WAN2=eth1
LAN=eth2
LANIP=192.168.0.5
ifconfig ${LAN} ${LANIP} netmask 255.255.255.254 up
iptables -F
iptables -t nat -F
iptables -A INPUT -i lo -j ACCEPT
iptables -I INPUT 1 -m state --state NEW -i ${LAN} -j ACCEPT
iptables -I INPUT 1 -m state --state NEW -i ${WAN} -j ACCEPT
iptables -A FORWARD -i ${WAN2} -o ${LAN} -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ${LAN} -o ${WAN} -j ACCEPT
iptables -A FORWARD -i ${WAN} -o ${LAN} -j ACCEPT
iptables -A FORWARD -i ${LAN} -o ${WAN2} -j ACCEPT
iptables -t nat -A POSTROUTING -o ${WAN2} -j MASQUERADE
iptables -A FORWARD -i ${WAN} -o ${WAN} -j REJECT
iptables -A FORWARD -i ${WAN2} -o ${WAN2} -j REJECT
for file in ${LAN} ${WAN} ${WAN2}; do
echo "1" > /proc/sys/net/ipv4/conf/${file}/proxy_arp
echo "1" > /proc/sys/net/ipv4/conf/${file}/forwarding
done
echo 1 > /proc/sys/net/ipv4/ip_forward