用ArchLinux做wifi热点无线路由

作者: kemen 2016-05-14 13:34:15
很久没来社区了,如下的用ARCHLINUX做WIFI的热点是参与了网上众多前辈的贴子做的一个过程,先感谢各位前辈的无私。

1) 安装iw
Pacman -S iw
Iw list
查看如下项:
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN

* monitor
* mesh point
如有红色字体的项,证明无线网卡支持AP模式,可以做热点,否则不行,就不用再往下做了。
2) 安装hostapd
Pacman -S hostapd
Vim /etc/hostapd/hostapd.conf
注:如/etc/hostapd/目录下没有hostapd.conf就新建一个输入如下内容:
ctrl_interface=/var/run/hostapd
ctrl_interface_group=wheel
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
wpa_passphrase=12345678 #wifi 密码
driver=nl80211
interface= wifi0 #无线网卡名称
hw_mode=g
channel=9
ssid=I Miss You # wifi 的ssid

保存,退出
3) 安装dnsmasq
Pacman -S dnsmasq

vim /etc/dnsmasq.conf 修改成如下样子:
interface= wifi0 #无线网卡名称
listen-address=192.168.100.1 #wifi0的IP地址
no-dhcp-interface=eth0 #连接上网的网卡
dhcp-range=192.168.100.50,192.168.100.150,12h #连接上wifi后分配的地址段和有效时间
server=/public1.114dns.com/114.114.114.114 #DNS

保存并退出
4) 安装haveged
5) 修改/etc/resolv.conf
Vim /etc/resolv.conf
输入如下内容:
Nameservice 192.168.1.1
Nameservice 114.114.114.114
6) 手动给无线网卡指定一个IP地址,要和DNSMASQ中的listen-address一样
ifconfig wifi0 192.168.100.1 netmask 255.255.255.0 up
7) 开启路由转发功能

Linux系统缺省并没有打开IP转发功能,要确认IP转发功能的状态,可以查看/proc文件系统,使用下面命令:

cat /proc/sys/net/ipv4/ip_forward
如果上述文件中的值为0,说明禁止进行IP转发;如果是1,则说明IP转发功能已经打开。

要想打开IP转发功能,可以直接修改上述文件:

echo “1” > /proc/sys/net/ipv4/ip_forward
把文件的内容由0修改为1。禁用IP转发则把1改为0。

上面的命令并没有保存对IP转发配置的更改,下次系统启动时仍会使用原来的值,要想永久修改IP转发,需要修改/etc/sysctl.conf文件,修改下面一行的值:
net.ipv4.ip_forward = 1
修改后可以重启系统来使修改生效,也可以执行下面的命令来使修改生效:
sysctl -p /etc/sysctl.conf
进行了上面的配置后,IP转发功能就永久使能了
必须是在ROOT登入状态下才可以开启
Su 输入root 的密码
echo “1” > /proc/sys/net/ipv4/ip_forward

iptables -A FORWARD -i wifi0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o wifi0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

8) 启动各个服务
Systemctl start haveged
Systemctl enable haveged
Systemctl start hostapd
Systemctl enable hostapd
Systemctl start dnsmasq
Systemctl enable dnsmasq

注:为避免重启后要手动给无线网卡指定IP地址,步骤6 - 8 可按下如方法做(记得用systemctl disable 取消第8步的systemctl中除haveged外的所有启动服务):
新增一个systemctl服务文件:
Vim /usr/lib/systemd/system/rc-local.service
输入如下内容:
[Unit]
Description='/etc/rc.d/rc.local Compatibility'


[Service]
Type=oneshot
ExecStart=/etc/rc.d/rc.local
TimeoutSec=0
StandardInput=tty
RemainAfterExit=yes
#SysVStartPriority=99

[Install]
WantedBy=multi-user.target
保存退出。
Mkdir /etc/rc.d
Vim /etc/rc.d/rc.local
输入如下内容:
#!/bin/bash

ifconfig eth0 down
ifconfig eth0 192.168.1.254 netmask 255.255.255.0
route add default gateway 192.168.1.1 #指定默认路由

ifconfig wifi0 down
ifconfig wifi0 192.168.100.1 netmask 255.255.255.0

#如果在第8步中取消了haveged,也可以加在下面
systemctl start hostapd
systemctl start dnsmasq

echo "1" > /proc/sys/net/ipv4/ip_forward

iptables -A FORWARD -i wifi0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o wifi0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

保存退出
Systemctl enable rc-local.service

Reboot

重启后即可。

cat /var/lib/misc/dnsmasq.leases 可以看有多少外WIFI客户端连接上

相关资讯