我继承了一个旧的 Linux 机箱和一台 MyBookLive,并且想通过无线网络使用 MyBookLive,本质上是使用 Linux 机箱作为网关。
我刚刚清理了 Linux 机器(家里),并在其上安装了 Ubuntu 12.04。我的网络设置目前如下所示:
(192.168.0.1) 网络掩码 255.255.255.0) ISP---无线路由器---家里的wlan0(192.168.0.12) | 主页上的 eth0 --- MyBookLive MacBook (192.168.0.11)
因此 MyBookLive 基本上就是一个高级的外置硬盘。路由器确实有一个以太网端口,但我室友的电脑正在使用它,所以我无法将 MyBookLive 直接插入其中。
现在我可以从家里 ping MyBookLive.local 和 MacBook.local,但我无法理解和弄清楚正确的 iptables 命令是什么,以使我的 MacBook 通过 Bonjour 网络看到我的 MyBookLive。另外,我不确定是否需要设置 DNS 来转发 xxx.local Bonjour/Zeroconf 地址。
我尝试了以下操作将我的整个有线网络(只有我的 MyBookLive)转发到单个 IP 地址:
sysctl net.ipv4.ip_forward=1 iptables -A 转发 -i wlan0 -o eth0 -j 接受 iptables -A 转发 -i eth0 -o wlan0 -j 接受 iptables -t nat -A PREROUTING -i eth0 -p tcp -j DNAT --to 192.168.0.66 iptables -t nat -A PREROUTING -i eth0 -p udp -j DNAT --to 192.168.0.66
但我无法从 MacBook ping 通此地址。这可能是大错特错,但我对设置此类网络完全是菜鸟,需要一些专家的帮助才能正确设置。
答案1
这里最简单的事情就是设置 NAT 并将所需的端口从家庭的 wlan0 接口转发到外部硬盘接口上的等效端口。
以下脚本是一个设置 NAT 的示例,以便连接到家中 eth0 的设备(通过交换机或交叉 TP)可以访问无线网络。
/bin/sh #!/bin/sh 复制代码 INTERNAL_IP=家庭.lan 内部网络地址=255.255.255.0 内部=eth0 外部=wlan0 ifconfig $INTERNAL $INTERNAL_IP 网络掩码 $INTERNAL_NM 启动 echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o $EXTERNAL -s 192.168.0.0/24 -j MASQUERADE iptables -A FORWARD -i $EXTERNAL -o $INTERNAL -m 状态 \ --state 相关,已建立 -j 接受 iptables -A FORWARD -i $INTERNAL -o $EXTERNAL -j ACCEPT
要使所述情况发挥作用,必须启用无线网络中的设备以“回看”NAT 网络(隐藏在 home.lan 后面)。您在问题中尝试的方法基本上是正确的,只是它转换的方向错误。您希望将 home.lan 接口上特定端口传入的数据包转发到 mbl.lan 的本地隐藏 NAT IP
#(继续) iptables -t nat -A PREROUTING -i $EXTERNAL -p tcp --dport 445 -j DNAT \ --到 mbl.lan:445 iptables -t nat -A PREROUTING -i $EXTERNAL -p tcp --dport 139 -j DNAT \ --到 mbl.lan:139
这种设置将导致无法在主主机上运行 Samba 服务器,因为进入默认 Samba 端口的流量会被发送到外部硬盘。这不是问题的一部分,但一个可能的解决方案是在另一个端口上运行主主机的 Samba 服务,或者使用 --dport 值(例如 4455)并手动设置客户端在访问我的书时连接到另一个端口。
请注意,这个答案假设驱动器上正在使用 samba,并且如果使用不同的协议,则需要调整端口。
该方法的一个显著限制是,所有到外部驱动器的连接看起来都像是源自 home.lan。
网络别名:
mbl.lan(我的书直播 ip 地址;192.160.0.66)
home.lan(家庭 wlan0 ip 地址;192.168.0.12)
参考:
http://www.centos.org/docs/4/html/rhel-sg-en-4/s1-firewall-ipt-fwd.html
http://www.netfilter.org/documentation/HOWTO//NAT-HOWTO-6.html#ss6.2
答案2
br0
我认为简单的解决方案是在 linux-box 上设置桥接设备eth0
并向wlan0
其添加接口。
bridge-utils
在 ubuntu 上下载- 添加桥接
brctl addbr br0
- 添加网络设备以桥接
brctl addif br0 eth0
并brctl addif br0 wlan0
- 将 IP 设置为您的
br0
接口(不要将 IP 设置为 eth0 或 wlan0) - 删除 DNAT 规则
iptables
- 编辑您的
iptables
配置,并将参数-i
和替换-o
为-m physdev --physdev-in
和-m physdev --physdev-out
这将创建虚拟br0
接口,其作用就像 wlan0 和 eth0 是同一个网络上的一个接口一样。这样您就可以从网络上的任何一台 PC 访问您的网络磁盘。
编辑:
如果您在 中使用wlan0
AP,则此方法有效master mode
。我猜您正在使用hostapd
来在 linux-box 上创建该 AP。
我应该提到的另一件事是,只有在我先执行之后才有可能添加 wlan0 接口hostapd
。
hostapd
丰富的Linux 无线网络 资源:http://linuxwireless.org/en/users/Documentation/hostapd
答案3
我有一个类似的设置,用于短期测试。
以这种方式安装 hostapd:(hostapd 是无线接入点守护进程)
sudo apt-get install hostapd
这是一个非常简约的 hostapd.conf 配置文件(请注意,您需要更多配置来使用 WPA/WPA2 保护您的网络)。
interface=wlan0
driver=nl80211
ssid=AcidFlask
channel=9
hw_mode=g
country_code=NO
auth_algs=1
wpa=0
ignore_broadcast_ssid=0
然后我启动 hostapd 守护程序并按以下方式转发:
sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1
ifconfig wlan0 172.20.99.1 netmask 255.255.255.0
iptables -t nat -A POSTROUTING -s 172.20.99.0/24 -o eth0 -j MASQUERADE
hostapd -d hostapd.conf
最后,我在客户端上定义一个静态 IP(例如 172.20.99.2,网络掩码为 255.255.255.0,网关为 172.20.99.1 和 DNS 8.8.8.8)。
这确实是一个准系统解决方案,因为它缺乏无线安全和 DHCP,但它应该可以工作,并且您可以根据需要在此基础上进行构建。
另请注意,此解决方案需要你的 WiFi 适配器支持 AP 模式:
- ath9k 在大多数情况下都可以工作
- 据我所知,rtl8187 不起作用
编辑:我误解了您的短语“使用 Linux 机器作为无线接入点”。我以为您想将您的 Linux 机器无线连接到您的 MyBookLive。请忽略我的解决方案。