wlan0的静态IP失败


12

我目前正在尝试hostapd使用以下说明将Raspberry Pi设置为访问点:

RPI无线热点

不幸的是,我的静态IP地址在启动时拒绝设置。以下是我的内容/etc/network/interfaces

auto lo

iface lo inet loopabck
iface eth0 inet dhcp

iface wlan0 inet static
address 192.168.42.1
broadcast 192.168.42.255
netmask 255.255.255.0

up iptables-restore < /etc/iptables.ipv4.nat

奇怪的是,如果我在启动后运行以下命令,则一切正常:

sudo ifconfig wlan0 192.168.42.1

有人看到我可能遗漏的任何明显问题吗?自从我从事Linux配置以来已经很长时间了,以至于我觉得自己缺少一些简单的东西。


作为一种快速的解决方法,您可以在连接接口或最后一个启动脚本之后,将ifconfig作为启动脚本运行。您是否将固件升级到最新版本?不是aptitude更新,而是固件的raspi脚本。这解决了一些界面问题。
Piotr Kula 2013年

@ppumkin-我仍然是Raspberry Pi n00b。运行raspi脚本以更新固件的命令是什么?
贾斯汀·尼森纳

4
github.com/Hexxeh/rpi-update 去那里阅读。同样在重启后也进行能力更新。
Piotr Kula 2013年

@ppumkin-我已经运行了两个更新,但都没有解决这个问题。看来我现在必须解决该问题。
贾斯汀·尼斯纳

不得已的方法是尝试使用最新映像从新近刻录Rasbpian。再次进行更新,看看是否有帮助。这有助于解决mi WiFi问题。
Piotr Kula 2013年

Answers:


4

我的接口文件看起来有些不同,但是一直对我有用。

auto lo

iface lo inet loopback
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0

iface wlan0 inet static
    address 192.168.1.123
    netmask 255.255.255.0
    network 192.168.1.1
    broadcast 255.255.255.255
    gateway 192.168.1.1
    wpa-ssid "SSID"
    wpa-psk "PASSWORD"

也许这可能有所帮助


广播IP不应看起来像这样:192.168.1.255255只能放在最后一个位置,因为否则您不会在路由器的所有设备上广播。
XandruCea 2013年

我相信原始问题缺少的部分是上述“ auto wlan0”行。您可能还想在广播行之后添加“ dns-nameservers 8.8.8.8”(作为示例)。
2014年

2

禁用ifplug,则静态IP地址应该可以工作。


为我工作!/ etc / default / ifupd,更改为auto / all => eth0
flotto

2

我怀疑hostapd重新初始化了接口,这是导致失败的原因。您可以手动将ifconfig命令添加到/etc/rc.local文件中,该文件将在启动时自动执行。


2

在raspbian jessie中,这绝对是一个竞争条件,它已经停止使用基于运行级别的init,而倾向于基于包树的“同时启动所有内容”方法。我想我可以通过将这些行放进去来解决这个问题/etc/rc.local

/sbin/ifdown wlan0
/sbin/ifup wlan0
/sbin/ifconfig wlan0 192.168.42.1
/usr/sbin/service isc-dhcp-server start

时间会告诉我的。


好的,在我从1984年到1992年工作时,unix当然具有运行级别和telinit,但是遗憾的是最近才返回。也许,如果我们经历的所有事情是不是,有人会解释这实际上。(我的修复程序仍然有效,但我不喜欢它)。
Colin Wray 2015年

我认为这是一种竞赛条件,因为启动顺序有两种可能的结果,它们是随机发生的。
Colin Wray 2015年

kes 对于向后误读此答案,我深感抱歉-这是由SysV init fixed w / systemd 引起的问题。在任何情况下,它们都无法防止出现竞争状况,因为从本质上讲,它们启动和持久化了许多服务。错误地配置任何东西都可能导致问题,而我要反对的意思是,systemd本质上应归咎于它(可以说它有一种更好的方法来解决依赖关系,它并不仅仅是“同时启动所有内容”威利·尼利(willy-nilly)-但这正切线)...
goldilocks

对Linux机器上的网络一般持一种不合常规的态度,这使我对这样的问题几乎没有什么看法,如果您有适合您的解决方案,那很好,但您的诊断似乎很con测(看起来像是在竞争,步行)就像比赛条件...但是鸭子的影子不是鸭子...等等)。
goldilocks

1
在阅读我的OP时,我可以看到为什么您认为我直接将系统归咎于它,以及为什么它会像您一样激起坚定的防御者。不,我认为问题必须出在他们自称遵循的软件包依赖树中,而我对此一无所知。它必须以某种方式认识到ifup和hostapd之间的冲突。
Colin Wray 2015年

1

我将尝试在您当前的无线接口配置上方添加以下行:

auto wlan0
allow-hotplug wlan0

这告诉您的接口配置自动启动wlan0接口,并且稍后可以将其插入(hotplug)。

您可能还需要添加一条gateway <IP Address>线才能使路由正常工作。


这就是对我有用的东西!谢谢。
johnboiles 2014年

0

不一定是一个很好的解决方案,但是由于在使用/ etc / network / interfaces时我的staticip出现问题,我改用通过路由器使用静态ip了吗?您是否以此方式尝试过呢?


0

我遵循相同的教程在Pi上设置WAP。

不幸的是,dhcp服务无法在启动时启动。引导后,检查服务表明它未在运行:service isc-dhcp-server status ISC DHCP服务器的状态:dhcpd未在运行

实际上,接口wlan0没有获得IP地址,这就是dhcp服务器无法启动的原因。

我按照以下链接中的说明进行操作,但无法解决问题:http : //sirlagz.net/2013/02/10/how-to-use-the-raspberry-pi-as-a-wireless-接入点路由器部分3b /

然后,我按照这篇文章中的说明进行操作:http : //www.novitiate.co.uk/? p= 183

纳米/etc/rc.local

#!/bin/sh -e
# rc.local
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
# In order to enable or disable this script just change the execution
# bits.
# By default this script does nothing.

# Print the IP address
sleep 5
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi
      sudo ifup wlan0                           #start wlan0 with ip adress in  /etc/network/interfaces
#      sudo service hostapd start               #not necessary if you already start hostapd as a service
      sudo service isc-dhcp-server start        #start dhcp server
exit 0

重新启动后,DHCP服务器正在运行。

还有一种我可能不会测试的解决方案:糟糕,我没有足够的声誉来发布两个以上的链接。


0

我曾经也有过一样的问题。当dhcp服务器启动时,wlan0会以某种方式丢失其静态IP地址。编辑/ etc / default / ifplugd并更改为:

INTERFACES="eth0"
HOTPLUG_INTERFACES="eth0"

这个答案是正确的!不知道为什么投票否决了
flotto 2015年

我使用的是pi引导,有时它的结尾是169.xx.xx.xx地址,有时是我想要的静态地址。这样做是为了可靠地获取静态地址。谢谢@Stef!
彼得·巴格纳

0

另外,您可以创建一个微型服务来重新启动wlan0,并确保它在hostapd和isc-dhcp-server之前启动时启动。

创建新脚本/etc/init.d/wlan0-restart

sudo vi /etc/init.d/wlan0-restart

具有以下内容:

#!/bin/sh
#
#

### BEGIN INIT INFO
# Provides:          wlan0-restart
# Required-Start:    $network
# Required-Stop:     $network
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Restarts wlan0 interface
# Description:       Restarts wlan0 interface to fix problem with static address in WiFi AP
# X-Start-Before:    hostapd isc-dhcp-server
### END INIT INFO

PATH=/sbin:/usr/sbin:$PATH

do_start() {
  ifdown wlan0
  ifup wlan0
}

case "$1" in
  start)
    do_start
    ;;
  restart|reload|force-reload)
    echo "Error: argument '$1' not supported" >&2
    exit 3
    ;;
  stop)
    ;;
  status)
    ;;
  *)
    echo "Usage: $0 start|stop" >&2
    exit 3
    ;;
esac
exit 0

然后执行以下命令:

sudo chmod 755 /etc/init.d/wlan0-restart
sudo update-rc.d –f hostapd remove
sudo update-rc.d –f isc-dhcp-server remove
sudo update-rc.d wlan0-restart defaults
sudo update-rc.d hostapd defaults
sudo update-rc.d isc-dhcp-server defaults

重新启动并检查wlan0是否具有其静态IP地址以及isc-dhcpd-server是否正在运行:

pi@raspberrypi:~$ ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr e8:de:27:07:92:6a  
          inet addr:192.168.10.1  Bcast:192.168.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  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:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

pi@raspberrypi:~$ pgrep -l dhcpd
2315 dhcpd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.