Raspbian:强制执行wlan0静态ip

时间:2016-12-07 14:09:47

标签: linux networking ip debian raspbian

我想配置一个wlan0静态ip并通过ssh连接它。

这是我的/etc/network/interfaces

source-directory /etc/network/interfaces.d
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
adress 192.168.0.2
netmask 255.255.255.0

auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.100.102
netmask 255.255.255.0
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

当我ifconfig时,我的wlan0和eth0接口配置正确:

然而,当我想通过wifi ssh我的覆盆子时,我的Wifi路由器给我的覆盆子ip:192.168.100.116

如何强制我的Wifi路由器将192.168.100.102提供给我的rapsberry pi? 此外,我的Wifi路由器有时会192.168.100.102,有时192.168.100.116

给我的覆盆子

不知道为什么

2 个答案:

答案 0 :(得分:3)

当我想将Rasperry Pi 2与Raspbian Jessie Lite连接到无头配置中时,我遇到了类似的问题,以便从我的带有PuTTY的Windows 10 PC使用SSH进行访问。

在我看来,事实证明Ahavi守护进程(zeroconf的一个实现)与我的路由器的DHCP和名称服务器选项冲突。

Raspbian Jessie和Raspbian Jessie Lite预先配置了Avahi和DHCP客户端守护程序,用于自动网络配置。在大多数情况下,这可能会很好,但如果不是这样,事情会因为不可预测的副作用而变得更糟。

我不会深入研究任何细节(这真的是一个长篇故事),我将在这里总结一下我做了什么以及为什么。有太多可能的问题,我不想把你推向错误的方向。试试看。如果失败,请寻找其他方法或发表评论以澄清。

现在让我们开始吧:

  1. 首先在带有Raspbian Jessie全新副本的非生产性SD卡上试用(对于无头服务器,我更喜欢Raspbian Jessie Lite)。

  2. 使用键盘和显示器连接启动Raspberry Pi,并使用用户pi登录。

  3. 使用sudo raspi-config启动raspi-config,并确保打开SSH服务器(menue 7 Advanced Options - > A4 SSH)。

  4. 使用ifconfig获取eth0的当前IP地址。

  5. 尝试使用ssh通过以太网连接到此地址。如果您无法连接,请先解决此问题。在此阶段您无法通过WLAN连接。

  6. 如果连接成功,您可以通过ssh使用此连接完成其余配置。

  7. 清除avahi-daemon

    $ sudo apt-get purge avahi-daemon

  8. 不要担心错误消息' rmdir:无法删除'/ var / run / avahi-daemon':目录不为空'。这与一个空套接字和一个pid文件有关,目前无法删除。你可以忽略这条消息或手动删除目录,但是如果你离开它就不会受到伤害。

    $ sudo rm -r /var/run/avahi-daemon
    
    1. 配置/ etc / network / interfaces
    2. 重要的是要知道,我们在此文件中只需要进行一次更改。使用您选择的编辑器打开/ etc / network / interfaces进行更改(注意:如果您按照以下步骤操作,则尚未安装1:1扩展vim)。

      $ sudo nano /etc/network/interfaces
      

      在现有行auto eth0之前添加行iface eth0 inet manual。我们在这里所要做的就是到这里。更改后,文件应如下所示:

      # interfaces(5) file used by ifup(8) and ifdown(8)
      
      # Please note that this file is written to be used with dhcpcd
      # For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
      
      # Include files from /etc/network/interfaces.d:
      source-directory /etc/network/interfaces.d
      
      auto lo
      iface lo inet loopback
      
      auto eth0
      iface eth0 inet manual
      
      allow-hotplug wlan0
      iface wlan0 inet manual
          wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
      
      allow-hotplug wlan1
      iface wlan1 inet manual
          wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
      

      注意:请务必阅读并理解文件顶部的注释!

      1. 配置DHCP客户端守护程序
      2. 接下来,如先前编辑的文件的注释中所述,在DHCP客户端守护程序的配置文件末尾添加静态IP配置。

        如果我们打算使用静态IP地址,使用DHCP客户端可能听起来很愚蠢。但是,当我尝试删除DHCP客户端守护程序时,我遇到了新的配置和/或依赖性问题。最后,我决定尽可能接近标准配置,并保持原样。

        配置在文件/etc/dhcpcd.conf的最后完成(观看正确的拼写)。文件中的最后一行应为:' nohook lookup-hostname'。因此,让我们在编辑器中打开文件,然后向下滚动到文件的底部。

        $ sudo nano /etc/dhcpcd.conf
        

        添加静态ip定义。就我而言,/etc/dhcpcd.conf的定义如下:

        nohook lookup-hostname
        
        # static ip configuration for eth0 and wlan0
        interface eth0
        static ip_address=192.168.1.61/24
        static routers=192.168.1.1
        static domain_name_servers=192.168.1.1 8.8.8.8
        
        interface wlan0
        static ip_address=192.168.1.62/24
        static routers=192.168.1.1
        static domain_name_servers=192.168.1.1 8.8.8.8
        

        请注意,语法与/etc/network/interfaces中使用的语法不同。对于完整的C类网络,必须在IP地址末尾以/ 24的形式提供网络掩码。有关详细信息,请参阅man dhcpcd.conf

        1. 使用eth0重新启动并测试您的配置
        2. 下次重启后,您应该拥有可靠的网络配置和静态IP地址。但请记住,我们还没有完成,只有eth0可以工作。此时,如果发出ifconfig,甚至不会为wlan0显示IPv4地址

          如果它失败并且你到目前为止没有做任何错误(仔细检查拼写错误),那么你还有另一个问题必须先修复;在这种情况下,这个解决方案可能不适合你。

          1. 配置WLAN
          2. 要配置WLAN,我们必须编辑/etc/wpa_supplicant/wpa_supplicant.conf并为其添加网络配置。

            在我的情况下,我使用WPA / PSK进行安全访问,在修改国家/地区代码并添加网络条目后,文件内容如下所示:

            country=CH
            ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
            update_config=1
            
            # home network; allow all valid ciphers
            network={
                ssid="home"
                scan_ssid=1
                key_mgmt=WPA-PSK
                psk="very secret passphrase"
            }
            

            SSID ="家用"是WLAN路由器或接入点的WLAN网络名称(SSID)。

            scan_ssid = 1扫描隐藏的SSID。这是通常的做法,但可能会减慢扫描过程。

            key_mgmt = WPA-PSK定义将使用WPA预共享密钥管理协议。

            psk ="非常秘密的密码"定义您的密码以访问路由器。

            将为ssid和psk指定的值替换为安全WLAN访问的实际值。有几种支持的协议,一些需要其他和更多选项。

            请参阅man wpa_supplicant.conf以获取更多详细信息。

            1. 使用wlan0
            2. 重新启动并测试您的配置

              现在是时候重启并测试wlan0了。如果发出ifconfig,现在应该显示为wlan0配置的IP地址。

              如果是这种情况,您应该能够使用带有为wlan0配置的IP地址的ssh访问Rasperry Pi。

              我希望你快乐,到目前为止一切正常。如果是这种情况,我可以停止在这里写字,让你独自一人。但等等,还有更多!

              1. 两个网络连接,这有意义吗?
              2. 如果您通过同一网络连接到Raspberry Pi,eth0和wlan0并发出ifconfig来查看传输和接收的数据包或字节,您会发现,即使您已连接到wlan0大多数流量的IP都通过eth0。

                我无法解释为什么会出现这种情况,但很明显,数据包会沿着更快的路径路由,这听起来不错。

                但是,我发现这种行为不受欢迎并且减慢了我的连接速度的罕见情况。由于我使用我的Raspberry Pi在我的路由器附近使用有线连接到eth0或更远离路由器而无法使用wlan0访问电缆,我决定停止wlan0如果有一条有效连接到路由器的电缆附在eth0。

                为此,我创建了脚本/home/pi/ifdown-wlan-if-not-needed.sh

                #!/bin/sh
                #### Shutdown wlan0
                # Test eth0 for a cable attached and
                # shutdown wlan0 if this is the case.
                ###
                sleep 30
                cable=$(cat /sys/class/net/eth0/carrier)
                echo $cable
                if [ "$cable" = "1" ]; then
                   sudo ifdown wlan0
                fi
                exit 0
                

                然后我将脚本设置为可执行文件

                $ chmod +x /home/pi/ifdown-wlan-if-not-needed.sh
                

                使用crontab -e重新启动后,将其添加到用户pi的crontab中,以便执行。

                @reboot /home/pi/ifdown-wlan-if-not-needed.sh
                
                1. IP地址解析的名称
                2. 到目前为止,我还没有解决IP地址解析问题的名称。如何做到最好,取决于您的网络设备和用例。

                  我的路由器提供将名称绑定到MAC地址,主机名和IPv4地址的功能。但是,由于某些原因,这些选项都不起作用。有时它只使用给定的名称,有时需要后缀.home。有时名称会从列表中消失,或者即使一切看起来都没有名称解析也没有。

                  我最终在我的Windows PC和笔记本电脑的C:\ Windows \ System32 \ drivers \ etc \ hosts文件中定义了地址。这当然不是最先进的,但是可靠而且没有麻烦。

                  但是,我不能保证我所做的也适合你,但我希望它能带你走上正确的道路来解决你的问题。自从大约一年前Raspbian Jessie发布以来,我一直在使用我的配置。到目前为止,它没有任何麻烦而幸免于难。

                  祝你好运!

答案 1 :(得分:1)

登录路由器管理界面并且(如果具有此功能,大多数都有)在路由器上为所选客户端保留DHCP地址,以便特定客户端始终具有相同的IP地址。有关详细信息,请参阅this article