2016-12-07 30 views
0

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

这里我/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的接口配置正确:

然而,当我要ssh通过无线网络连接我的覆盆子,我的WiFi路由器给我覆盆子的ip:192.168.100.116

如何强制我的Wifi路由器给192.168.100.102加入我的rapsberry pi? 此外,我的WiFi路由器给我的覆盆子有时192.168.100.102有时192.168.100.116

不知道为什么

回答

1

登录路由器管理界面上(如果它有这个功能,大多数人的话)保留一个DHCP地址在您的选定客户端的路由器上,以便特定客户端始终具有相同的IP地址。有关更多信息,请参见this article

2

当我想要将我的Rasperry Pi 2与Raspbian Jessie Lite连接起来,并通过我的Windows 10 PC上的PuTTY进行SSH访问时,我遇到了类似的问题。

就我而言,事实证明,Ahavi守护进程(zeroconf的实现)与我的路由器的DHCP和名称服务器选项冲突。

Raspbian Jessie和Raspbian Jessie Lite预先配置了Avahi和DHCP客户端deamon以进行自动化网络配置。在大多数情况下,这可能会工作得很好,但如果不是的话,情况会变得更糟,并伴随着不可预知的副作用。

而不是深入到任何细节(它真的很长的故事),我只是在这里总结我做了什么,为什么。有太多可能的问题,我不想把你推向错误的方向。试试看。如果失败,请寻找其他方法或留下澄清意见。

现在让我们你的脚弄湿:

  1. 与Raspbian杰西的新副本首先尝试一个非生产SD卡(无头服务器,我更喜欢Raspbian杰西精简版)。

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

  3. sudo raspi-config启动raspi-config并确保打开SSH服务器(菜单7高级选项 - > A4 SSH)。

  4. 获取您当前的eth0 IP地址ifconfig

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

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

  7. 吹扫的avahi守护

    $ sudo apt-get purge avahi-daemon

不要担心错误信息 '命令rmdir:无法删除‘/ var/run中/的avahi守护’:目录非空'。这涉及到一个空的套接字和一个pid文件,目前无法删除。您可以忽略此消息或手动删除目录,但如果您放弃它,它不会受到伤害。

$ sudo rm -r /var/run/avahi-daemon 
  • 配置的/ etc /网络/接口
  • 知道,我们只需要一个在这个文件中单一变化是很重要的。使用您选择的编辑器打开/ etc/network/interfaces以进行更改(注意:如果您按照此步骤1:1扩展vim尚未安装)。

    $ sudo nano /etc/network/interfaces 
    

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

    # 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 
    

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

  • 配置DHCP客户端守护程序
  • 接着,如在先前编辑的文件的注释中规定,在配置文件的结尾添加静态IP配置DHCP客户端守护程序。

    如果我们打算使用静态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

  • 重新启动,并为eth0
  • 测试您的配置,你应该有静态IP地址的可靠的网络配置在下次重新启动后。但请记住,我们还没有完成,只有eth0会起作用。此时,如果发出ifconfig,即使没有IPv4地址也会显示wlan0

    如果失败并且您迄今没有做任何错误(仔细检查拼写错误),那么您有另一个必须修复的问题第一;在这种情况下,这个解决方案可能不适合你。

  • 配置WLAN
  • 要配置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了解更多详细信息。

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

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

    我希望你很高兴,到目前为止,一切正常。如果是这种情况,我可以停止在这里写作,让你一个人待着。但是等等,还有更多!

    1. 两个网络连接,是否有意义?

    如果您在两个相同的网络连接到树莓派,eth0和为wlan0并发出ifconfig看看在发送和接收的数据包或字节,你会认识到,即使你连接到IP for wlan0大多数流量正在通过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 
    

    并将其添加到用户pi的crontab重新启动后执行crontab -e

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

    我的路由器提供了将名称绑定到MAC地址,主机名和IPv4地址的功能。但是,由于某些原因,这些选项都不起作用。有些时候只需使用给定的名称就可以工作,其他时候需要后缀.home。有时候名字从列表中消失或者甚至没有名字解析发生,即使一切看起来都不错。

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

    但是,我无法保证我所做的工作对您也有效,但我希望它能为您解决问题带来正确的方向。自从Raspbian Jessie大约一年前发布以来,我一直在使用我的配置。它迄今在没有麻烦的情况下幸存下来。

    祝你好运!