我想配置一个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
不知道为什么
答案 0 :(得分:3)
当我想将Rasperry Pi 2与Raspbian Jessie Lite连接到无头配置中时,我遇到了类似的问题,以便从我的带有PuTTY的Windows 10 PC使用SSH进行访问。
在我看来,事实证明Ahavi守护进程(zeroconf的一个实现)与我的路由器的DHCP和名称服务器选项冲突。
Raspbian Jessie和Raspbian Jessie Lite预先配置了Avahi和DHCP客户端守护程序,用于自动网络配置。在大多数情况下,这可能会很好,但如果不是这样,事情会因为不可预测的副作用而变得更糟。
我不会深入研究任何细节(这真的是一个长篇故事),我将在这里总结一下我做了什么以及为什么。有太多可能的问题,我不想把你推向错误的方向。试试看。如果失败,请寻找其他方法或发表评论以澄清。
现在让我们开始吧:
首先在带有Raspbian Jessie全新副本的非生产性SD卡上试用(对于无头服务器,我更喜欢Raspbian Jessie Lite)。
使用键盘和显示器连接启动Raspberry Pi,并使用用户pi登录。
使用sudo raspi-config
启动raspi-config,并确保打开SSH服务器(menue 7 Advanced Options - > A4 SSH)。
使用ifconfig
获取eth0的当前IP地址。
尝试使用ssh通过以太网连接到此地址。如果您无法连接,请先解决此问题。在此阶段您无法通过WLAN连接。
如果连接成功,您可以通过ssh使用此连接完成其余配置。
清除avahi-daemon
$ sudo apt-get purge avahi-daemon
不要担心错误消息' rmdir:无法删除'/ var / run / avahi-daemon':目录不为空'。这与一个空套接字和一个pid文件有关,目前无法删除。你可以忽略这条消息或手动删除目录,但是如果你离开它就不会受到伤害。
$ sudo rm -r /var/run/avahi-daemon
重要的是要知道,我们在此文件中只需要进行一次更改。使用您选择的编辑器打开/ 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
注意:请务必阅读并理解文件顶部的注释!
接下来,如先前编辑的文件的注释中所述,在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
。
下次重启后,您应该拥有可靠的网络配置和静态IP地址。但请记住,我们还没有完成,只有eth0可以工作。此时,如果发出ifconfig
,甚至不会为wlan0显示IPv4地址
如果它失败并且你到目前为止没有做任何错误(仔细检查拼写错误),那么你还有另一个问题必须先修复;在这种情况下,这个解决方案可能不适合你。
要配置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了。如果发出ifconfig
,现在应该显示为wlan0配置的IP地址。
如果是这种情况,您应该能够使用带有为wlan0配置的IP地址的ssh访问Rasperry Pi。
我希望你快乐,到目前为止一切正常。如果是这种情况,我可以停止在这里写字,让你独自一人。但等等,还有更多!
如果您通过同一网络连接到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
到目前为止,我还没有解决IP地址解析问题的名称。如何做到最好,取决于您的网络设备和用例。
我的路由器提供将名称绑定到MAC地址,主机名和IPv4地址的功能。但是,由于某些原因,这些选项都不起作用。有时它只使用给定的名称,有时需要后缀.home。有时名称会从列表中消失,或者即使一切看起来都没有名称解析也没有。
我最终在我的Windows PC和笔记本电脑的C:\ Windows \ System32 \ drivers \ etc \ hosts文件中定义了地址。这当然不是最先进的,但是可靠而且没有麻烦。
但是,我不能保证我所做的也适合你,但我希望它能带你走上正确的道路来解决你的问题。自从大约一年前Raspbian Jessie发布以来,我一直在使用我的配置。到目前为止,它没有任何麻烦而幸免于难。
祝你好运!答案 1 :(得分:1)
登录路由器管理界面并且(如果具有此功能,大多数都有)在路由器上为所选客户端保留DHCP地址,以便特定客户端始终具有相同的IP地址。有关详细信息,请参阅this article。