ubuntu上hostapd共享上网

在ubuntu主机上安装hostapd,让手机可以共享上网,
ubuntu主机有2个网卡

eth0: (可以上公网)
IP:动态

wlan0:(不能上公网,在这个接口上安装hostapd)
IP:192.168.5.1/24

1、安装hostapd

sudo apt install hostapd

升级hostapd(可以不用升级)

git clone git://w1.fi/srv/git/hostap.git
cd hostap/hostapd
cp defconfig .config
make
sudo cp hostapd /usr/sbin/hostapd

2、配置hostapd

新建/etc/hostapd/hostapd.conf

interface=wlan0
driver=nl80211
ssid=TP-LINK_TEST  #热点名称
channel=10
hw_mode=g
wpa=3
wpa_passphrase=12345678 #无线密码
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
ignore_broadcast_ssid=0 #0:显示热点名称 1:隐藏热点名称

使用vi /etc/init.d/hostapd对该文件进行编辑,修改内容如下

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

不让NetworkManager管理无线设备, c8:3a:35:cb:18:e0是wlan0的mac地址

sed -i '/\[keyfile\]/a unmanaged-devices=mac:c8:3a:35:cb:18:e0' /etc/NetworkManager/NetworkManager.conf
sudo systemctl restart NetworkManager.service

3、启动hostapd

sudo systemctl start hostpad.serive

如果hostapd开启正常,手机上就能看到TP-LINK_TEST这个热点,连接时发现他不能获取IP,那是UBUNTU上没安装dnsmasq软件,这里就不说明了,我们在手机上直接设置静态IP

IP: 192.168.5.11
网关:192.168.5.1
DNS:8.8.8.8

4、NAT共享网络

配置wlan0的IP

sudo ifconfig wlan0 192.168.5.1/24

启用路由转发,编辑/etc/sysctl.conf 文件,删除起始的“#”,解除

net.ipv4.ip_forward=1

的注释。然后使其生效:

sudo sysctl -p

配置NAT规则

sudo iptables -A FORWARD -o eth0 -i wlan0 -s 192.168.5.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

第一条规则允许转发初始网络包,第二条规则允许转发已经建立连接后的网络包,第三条则设置NAT。

5、保存iptables规则

sudo iptables-save > /etc/iptables.rules

iptables.rules内容

# Generated by iptables-save v1.6.0 on Tue Mar 22 14:32:46 2022
*nat
:PREROUTING ACCEPT [18938:1823629]
:INPUT ACCEPT [12879:1428924]
:OUTPUT ACCEPT [9504:655878]
:POSTROUTING ACCEPT [2629:186085]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Tue Mar 22 14:32:46 2022
# Generated by iptables-save v1.6.0 on Tue Mar 22 14:32:46 2022
*filter
:INPUT ACCEPT [1178226:592266889]
:FORWARD DROP [1500:70910]
:OUTPUT ACCEPT [1556034:1578549464]
-A FORWARD -s 192.168.5.0/24 -i wlan0 -o eth0 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Tue Mar 22 14:32:46 2022

然后新建一个bash脚本(名字随便),并保存到/etc/network/if-pre-up.d/目录下:

#!/bin/bash
iptables-restore < /etc/iptables.rules

这样,每次系统重启后iptables规则都会被自动加载。
不要尝试在.bashrc或者.profile中执行以上命令,因为用户通常不是root,而且这只能在登录时加载iptables规则。

附:
hostapd重启方法

sudo service hostapd stop
sudo ifconfig wlan0 down
sudo nmcli radio wifi off
sudo rfkill unblock wlan
sudo ifconfig wlan0 192.168.5.1/24 up
sleep 1
sudo service hostapd restart
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值