简述

想把RaspberryPi作为一个家庭服务器使用,家里使用的ADSL电信的接口,之前得用一个路由器,然后将RaspberryPi连接到路由器的LAN口,这样,就得给两个东东供电……改成一个就更好了,于是就想用运行Raspbian的RaspberryPi把两者的事情都一起做了。

参考资料

无线热点配置

硬件条件

首先RPi要插上一个无线网卡,我使用的无线网卡内部IC是RealTek的RTL8188,这样,通过RPi的Ethernet接口连接到家里的ADSL moderm进行PPPoE拨号,从Ethernet转发到Wifi,以无线热点的方式与其他wifi设备共享网络。如果不是用的这款无线网卡IC,要先确认下无线网卡是否支持Access Point模式。

需要打通的步骤

  • 使能无线网卡作为Access Point
  • 在有wifi设备(手机,平板……)连接到RPi wifi网络时,自动分配IP地址给这些设备
  • 将Ethernet拨号网络与wifi网络使用网络地址转发方式整合,这样wifi网络才会真正连接到internet

必要软件安装

sudo

hostapd:使能和管理无线网卡作为Access Point用;
udhcpd:使无线网卡能动态分配IP地址给连接来的wifi设备。
这里有一点要特别补充,RTL8188并不被RPi官方的Debian系统所支持,hostapd使用它时要做如下额外的配置:

sudo apt-get install bridge-utils
wget http://www.daveconroy.com/wp3/wp-content/uploads/2013/07/hostapd.zip
unzip hostapd.zip
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.bak
sudo mv hostapd /usr/sbin/hostapd.edimax
sudo ln -sf /usr/sbin/hostapd.edimax /usr/sbin/hostapd
sudo chown root.root /usr/sbin/hostapd
sudo chmod 755

其实以上步骤就是对原来的hostapd做了些修改,用于能正常驱动RTL8188,如果没有进行这一步,后面的hostapd功能经测试使用是不能用的。

配置DHCP

sudo

修改其中的一些内容(我将其中的option dns,opt wins的内容都mask掉了):

start 192.168.42.2 # This is the range of IPs that the hostspot will give to client devices.
end 192.168.42.20
interface wlan0 # The device uDHCP listens on.
remaining yes
opt dns 8.8.8.8 4.2.2.2 # The DNS servers client devices will use.
opt subnet 255.255.255.0
opt router 192.168.42.1 # The Pi's IP address on wlan0 which we will set up shortly.
opt lease 864000 # 10 day DHCP lease time in seconds

使能DHCP server

sudo nano /etc/default/udhcpd

注释掉其中的DHCPD_ENABLED=”no”这一行:

#DHCPD_ENABLED="no"

配置无线网卡

wlan0配置为静态IP

将wlan0的IP地址设置为上面的router地址:

sudo ifconfig wlan0 192.168.42.1

然后还要确保下次boot时也会自动将wlan0的IP地址设置为该值,所以:

sudo

修改interfaces文件的内容为:

auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet manual

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

配置HostAPD

sudo

将其文件内容改为如下:

interface=wlan0
driver=rtl871xdrv
ssid=My_SSID_Name
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=MYPASSWORD
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

然后配置hostapd文件路径:

sudo nano /etc/default/hostapd

修改其中的DAEMON_CONF内容为:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

配置NAT(网络地址转发)

NAT使多个网络设备能通过一个连接到internet的设备联网,Linux支持Netfilter (iptables)的方式进行网络地址转发。

内核的IP转向功能启动与配置

启动内核的IP转向功能:

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

为了在boot时自动配置启用IP转向功能,编辑/etc/sysctl.conf:

sudo

在最后添加一句(或找到文件中的这一句unmask掉):

net.ipv4.ip_forward=1

内核的NAT使能

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED, ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j

为便于下次reboot后不要每次都重新输入这些命令,将其保存下来:

sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

然后在/etc/network/interfaces文件中的末尾添加如下一句:

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

开启Access Point

sudo service hostapd start
sudo

运行如下命令,将使之在之后reboot时自动开启Access Point:

sudo update-rc.d hostapd enable
sudo

配置结果

此时直接连接我的wlan0作为AP的无线网试了下,没有连接成功,于是reboot系统,然后就能连接成功了。
在reboot完,log中最后看到了My IP address,显示了eth0和wlan0的两个地址,看来配置OK了。
用pad测试可以连接上网!
windows下用putty的SSH连接到eth0 OK!

Raspbian的log

[Raspbian]RaspberryPi做自动pppoe拨号路由器_无线网卡

连接上网络的pad

[Raspbian]RaspberryPi做自动pppoe拨号路由器_路由器_02

PPPoE拨号

这个在Raspbian下配置还比较简单的,首先得想办法将RaspberryPi连上网,因为要下载一些安装包:

sudo

等到安装完成,此时将RaspberryPi的eth0接口连接到家里的电信ADSL的接口上,然后输入命令:

pppoeconf

期间一直选择Yes项,然后还会让输入电信ADSL的账户名和密码,一直进行完就OK了。
然后用:

ifconfig

看下有没有ppp0的信息,有的话,一般就拨号成功咯。

重新做NAT

在PPPoE拨号成功后,需要重新设置下网络地址转发,因为之前的操作是将eth0转到wlan0了,而现在实际eth0是连接到电信接口的,实际使用的是ppp0,此时可以看到eth0的地址为169.254.xx.xx,表明是无效的IP,因此需要将ppp0转发到wlan0。我先将/etc/iptables.ipv4.nat删掉了,然后执行下面的:

sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sudo iptables -A FORWARD -i ppp0 -o wlan0 -m state --state RELATED, ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o ppp0 -j

为便于下次reboot后不要每次都重新输入这些命令,将其保存下来:

sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

然后我用如下命令重启raspbian的network:

sudo

结果卡住了,我将其停止,然后重新启动了下hostapd和udhcpd,接着就可以用pad连接我的wifi了。OK!!!

开机自动PPPoE拨号

上面步骤过后,reboot系统如果发现没法联网了,用ifconfig看,没有ppp0的话,说明是pppoe没有起来,用pon dsl-provider:

pon dsl-provider//启动建立的pppoe连接,连接名称为 dsl-provider
poff (-a) //关闭连接,如使用a参数,表示关闭当前所有连接
plog //查看pppoe连接的状态

问题记录

wlan0没法设置成静态IP

这个问题困扰比较久,因为将RPi当成路由器,需要将wlan0配成静态IP,但是修改/etc/network/interface文件,都是按照正常的步骤,修改也不会有问题,但是reboot之后,发现wlan0是没有IP地址的,因此导致后面操作都不会成功。
开始也怀疑是否网卡驱动,但是lsusb是可以看到的,而且也可以配成AP被搜索到,最后考虑到之前还对network相关做过一些其他的设置,想是不是其他配置文件有影响呢?另外Raspbian是否会有不太稳定的地方呢?于是没办法,只好重刷Raspbian系统了,然后配wlan0为静态IP,OK!!!

wlan0配成静态IP后,ssh无法接入

将wlan0配成静态IP,此时eth0是通过网线连接到我路由器的LAN口的,其方式是DHCP的(raspbian默认的),可以上网,然后将我window电脑使用Putty用SSH连接到eth0的地址,发现没法成功,只要将wlan0的静态IP方式恢复为系统默认manual方式,然后SSH可以接入了。为什么不能这样呢?