使用 dnsmasq 搭建 DHCP 服务
问题描述
使用dnsmasq配置一个DHCP服务。
树莓派上有两张网卡,一张有线(eth0),一张无线(wlan0)。无线网卡已经连接到无线热点,能够正常访问网络。
要实现的功能就是:把笔记本和树莓派用网线连接起来,笔记本能够通过DHCP获取IP地址,并访问网络。
所以,不光使用dnsmasq搭建了DHCP服务,还实现了SNAT(路由)功能。
所使用的环境
系统环境:Debian,准确说是Raspbian,又是树莓派。
硬件信息:Raspberry Pi 3B+
网络环境:树莓派上有两张网卡,一张有线(eth0),一张无线(wlan0)。无线网卡已经连接到无线热点,能够正常访问网络。
服务信息:DHCP地址范围为172.31.252.0/24;网关地址为172.31.252.1
开始进行配置
配置eth0接口
# 这里我们使用172.16.0.0/8网段
ifconfig eth0 172.31.252.1 netmask 255.255.255.0 up
配置 dnsmasq 服务
在这里dnsmasq提供DHCP服务,它也提供DNS功能,但我们不使用DNS功能。
安装dnsmasq服务:
apt-get install dnsmasq
(其实,如果没有dnsmasq也是可以的,但手动配置设置笔记本的网络,这也是可以的,但是本文是介绍dnsmasq服务的,所以不讨论这个。)
修改/etc/dnsmasq.conf文件,写入如下内容:
interface=eth0
listen-address=172.31.252.1
no-dhcp-interface=
dhcp-range=172.31.252.2,172.31.252.254,12h
#DNS服务器的地址,就是我的热点的地址
listen-address=192.168.1.1
#设置DHCP分配的地址范围和时间
dhcp-range=192.168.1.10,192.168.1.20,1h
#设定网关的地址,当然还是我热点的地址
dhcp-option=3,192.168.1.1
#重头戏来了,设定DNS服务器,可悲之前怎么也找不到设定的办法。。。还说是要使用DNS中继。。然后就呵呵了
dhcp-option=option:dns-server,114.114.114.114,8.8.4.4
实例配置文件:
# DNS
strict-order
cache-size=1500
conf-dir=/etc/dnsmasq.d
# DHCP
dhcp-option=3,172.16.1.1
dhcp-lease-max=200
dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases
interface=enp3s0
dhcp-range=172.16.1.10,172.16.1.100,12h
给网卡为 enp3s0的网卡口自动分配ip地址,ip 区间 172.16.1.10,172.16.1.100
重启或启动dnsmasq服务:
# 启动服务
systemctl start dnsmasq
# 重启服务
systemctl restart dnsmasq
# 或者手动启动
dnsmasq -C /etc/dnsmasq.conf
开启 SNAT 功能
开启内核ip_forward功能:
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
# 写入/etc/sysctl.conf中持久化配置
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
配置SNAT功能:
# 172.31.252.1/24:DHCP所使用的网段
# wlan0是连接到外部网络的接口
iptables -t nat -A POSTROUTING -s 172.31.252.1/24 -o wlan0 -j MASQUERADE
DNS解析劫持到dnsmasq
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
访问验证
至此,已经配置完成了。把我们的笔记本连接到树莓派上,然后使用dhclient -v eth0就能获取IP地址了,并访问网络了。
而我们的树莓派,就相当于一个小路由器了,虽然只有一个WAN口(树莓派的wlan0网口)和一个LAN口(树莓派的eth0网口)……
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。