比尔盖子 博客

树莓派搭建 PPPOE 无线路由器

注意:由于比尔盖子实现早已配置好树莓派,并没有对文中的方法进行逐步确认,因此比尔盖子不对文章内容的正确性负责! 树莓派恐怕是 2010 年的年度电子产品了,它完整的 ARM 架构、足够底的价格和足够小的体积,使它的功能迅速变得无限可能。对于家庭用户来说,把它变成一个可以运行很多守护服务的路由器是个不错的主意。

本文将讲述在没有显示器的情况下仅仅通过网络,将运行 Arch Linux 的树莓派变为路由器。

事前准备

注:新版 Arch 已经使用 netcli 替代了 netcfg,但是可以使用 yaourt,并修改开启自启动服务来重新使用 netcfg,本文不做说明。此为大坑!

比尔盖子假设你拥有一款B型树莓派,已经把 Arch Linux 安装到你的树莓派上,并已经成功引导进入系统,且拥有一个路由器和有线电缆,通过网络(DHCP)连接上树莓派,且可以访问互联网。本文不会对常规的系统安装配置给予任何帮助,因为它与台式机上的 Arch Linux 别无两样。

并且,你应当拥有一款对 Linux 友好的无线网卡,以便进行无线网络的搭建。我推荐使用 ath9kath9k_htc 内核模块的设备,它们都很新,稳定程度也比较高。

在进行下一步操作之前,运行 pacman -Syu 总是一个好主意。

搭建无线连接

我们面临的第一个问题,就是鸡与蛋的问题 —— 树莓派本身将成为一个路由器,以便我们连接它并上网;然而,在它没有配置好之前,这是一件矛盾的事情。

况且,本文的前提条件是“仅有网络,没有任何手段直接操作树莓派”。因此,我们要做的第一件事情,就是搭建一个“脚手架”,以便我们能够建立对树莓派的控制。

目前,既然我们可以通过有线网络连接树莓派,那么就登录到 SSH 上进行操作吧!

安装无线网卡

如果不出问题,树莓派可以直接识别出你当前使用的无线网卡。使用 lsusbiwconfig -a 加以确认。

[root@alarmpi /]# lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. LAN9500 Ethernet 10/100 Adapter
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 004: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n

[root@alarmpi /]# iwconfig   
wlan0     IEEE 802.11bgn  Mode:Master  Tx-Power=20 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Power Management:off

很好,看来我们的无线网卡能被正常识别。

配置无线热点

hostapd

既然无线网卡可以被连接,接下来就是让它发挥作用的时候了。我们在搭建 PPPOE,替换掉路由器之前,首先需要将无线网卡配置到位。 首先安装 hostapd 包,来实现无线软路由功能(值得一提的是,Android 的移动热点使用的程序也是它)。

pacman -S hostapd

在安装好之后,就可以对 hostapd 进行一些简单的配置了。编辑 /etc/hostapd/hostapd.conf。当然,这还需要根据你的实际情况对配置文件进行一些修改。

# 服务配置

# 网卡设备名
interface=wlan0

# 进程 PID 路径
ctrl_interface=/var/run/hostapd

# 无线网络的 SSID
ssid=RespPi

# 无线网络的信道
channel=6

# 使用 WPA2 进行加密
wpa=2

# 无线网络密码
wpa_passphrase=12345678

# 无线配置

# nl80211 是新一代 Linux 网卡驱动框架
driver=nl80211
beacon_int=100

# 802.11G 模式
hw_mode=g

# 禁用 802.11N
ieee80211n=0

# 使用 WPA-PSK 加密
wpa_key_mgmt=WPA-PSK

# 使用 CCMP 加密算法
wpa_pairwise=CCMP

max_num_sta=8
wpa_group_rekey=86400

dnsmasq

接下来,我们还需要安装一个 DHCP 服务器,来为无线网络中的客户端自动分配 IP 地址。dhcpd 是标准的 DHCP 实现,不过,比尔盖子和其它的路由器固件都偏爱 dnsmasq,一个轻快灵活的 DHCP 服务器。

使用 pacman -S dnsmasq 进行安装。安装后,编辑 /etc/dnsmasq.conf 来进行配置。别看它默认给出的示例又长又复杂,如果只是想让它简单的工作起来,那么只需要四行配置。

listen-address=192.168.0.1                      # 监听地址,同你想设置的网关地址
interface=wlan0                                 # 无线网卡的设备名,同 hostapd.conf 保持一致
bind-interfaces
dhcp-range=192.168.0.100,192.168.0.200,12h      # DHCP 分配  IP 的起止段和租约时间,这里是 12 小时
dhcp-option=6,8.8.8.8,8.8.4.4                   # 推送给客户端的 DNS 服务器

iptables

配制不当的防火墙是导致网络问题的罪魁祸首之一。然而,我们在这里使用 iptables 并不是为了安全,而是为了让无线网卡得以转发到有线网卡 eth0 上。

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

如果你的网卡不是 eth0,那么则需要修改一下。这样,无线网卡的数据便可自由传输在有线网络中了。 不过,我们需要使用 iptables-save > /etc/iptables/iptables.rules 保存 iptables 的规则,避免重启后小时。

启动无线

现在各大服务都已经配置好了,只要使用 systemctl 启动它们就行了。 不过,先别着急启用服务。我们必须先为无线网卡设置好网关和子网掩码,这样 hostapd 启用后,无线网络才能正确的运行。

ifconfig wlan0 192.168.0.1 netmask 255.255.255.0 其中的网关和子网掩码均可根据需要进行替换。每次运行 hostapd 之前,都必须运行此命令来初始化网卡,很麻烦。如果我们要开机就激活无线网络,这会成为一个非常严重的绊脚石。因此,我们不妨让 netcfg 来接管这项任务。

/etc/network.d 下创建一个名为 hostapd-wlan0 的文件。同样根据自己的需要,可以修改 IP 地址和子网掩码。

CONNECTION='ethernet'
DESCRIPTION='Hostapd Software Access Point'
INTERFACE='wlan0'
IP='static'
ADDR='192.168.0.1'
NETMASK='255.255.255.0'
SKIPNOCARRIER='yes'

允许转发

我们需要启用内核的 IPv4 包转发功能,才能正常访问互联网。编辑 /etc/sysctl.conf, 添加一行 net.ipv4.ip_forward = 1,然后 sysctl -p 应用设置。

接下来,就相继启动各种服务。

netcfg hostapd-wlan0
systemctl start iptables
systemctl start hostapd
systemctl start dnsmasq

最后,拿出手机进行测试,如果手机可以正常连接到树莓派,并可以访问互联网,那么说明无线网络配置已经初步成功!

开机自启动

我们已经配置好了第一阶段的无线网络,我们需要让无线网络开机自动启动,便于进行下一步的配置。

自启动无线网卡

比尔盖子之前反复强调过,无线网卡在启用前必须分配到了 IP 地址,否则 hostapd 将无法正常工作。因此,首先要处理的便是无线网卡的激活问题了。

编辑文件 /etc/conf.d/netcfg,将 NETWORKS 后面加上自己的网络设备。注意,若 NETWORKS 中存在有线网络连接,不要将其删除。

NETWORKS=(xxxx hostapd-wlan0)

接下来让网络开机自启动:systemctl enable netcfg。 然后再让之前我们见到的服务都自启动。

systemctl enable iptables
systemctl enable hostapd
systemctl enable dnsmasq

之后重启树莓派,重启后再次测试网络连接是否正常。若正常,那么说明第一阶段圆满结束,进入下一阶段!

配置 PPPOE

PPPOE 的后端服务是 pppd,使用 pacman -S ppp 进行安装。 我们依然用 Arch Linux 中方便的 netcfg 进行配置。创建文件 /etc/network.d/pppoe-eth0 进行 PPPOE 的拨号。

CONNECTION='pppoe'
DESCRIPTION='My PPPoE connection'
INTERFACE='eth0'  # 有线网卡设备名
USER='user'       # PPPOE 用户名
PASSWORD='pass'   # PPPOE 密码

CONNECTION_MODE='persist'
USEPEERDNS=0

然后再次编辑 /etc/conf.d/netcfg 文件,这次 NETWORKS 中就只剩下两个连接了。

NETWORKS(hostapd-wlan0 pppoe-eth0)

接下来,我们还要进一步配置 pppd,以便让网络更稳定些。

创建 /etc/ppp/ip-up.d/01-router.sh 文件,这使得 PPPOE 拨号连接断开重新后自动重启整个网络服务。

netcfg -d hostapd-wlan0
netcfg hostapd-wlan0
systemctl restart hostapd
systemctl restart dnsmasq

然后赋予其可执行权限 chmod +x /etc/ppp/ip-up.d/01-router.sh

创建 /etc/resolv.conf.head,填写自己用着顺手的 DNS 服务器。

nameserver 8.8.8.8
nameserver 8.8.4.4

然后 cp /etc/resolv.conf.head /etc/resolv.conf 进行文件覆盖,以防止自动生成不起作用。

配置 iptables

我们需要再次配置 iptables,让网络流量得以穿透 PPPOE 隧道。

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

之后保存设置:iptables-save > /etc/iptables/iptables.rules

最后将调制解调器(猫)的 LAN 线接入树莓派有线网卡,重启树莓派,看看你是否能上网了?如果可以,恭喜你,树莓派路由器配置圆满成功!

不过,一个常见的问题是,第一次死活无法连接到网络。这时候只能断开树莓派的电源,重启树莓派,并等待 3 分钟,再次连接,应该就可以工作正常。

Categories: IT生活

软件开放自由的文字游戏 » « 反网络流量分类技术

4 Comments

  1. 简便的方法有

    pacman -S create-ap
    create_ap --daemon wlan0 eth0 yourssid yourpasswd

  2. 请问
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    这一步有无必要,还是只要转到ppp0就好?

  3. 文章写得不错,学习了!!

发表评论

Your email address will not be published.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

Copyright © 2023 比尔盖子 博客

Theme by Anders NorenUp ↑