linux 双网卡内外网转发上网
要实现你的需求,需要进行一些网络配置。以下是一种可能的方法:
- 配置有线网卡(enp0s25)作为DHCP和DNS服务器。你可以使用Linux上的dnsmasq或isc-dhcpd等工具来实现这个功能。这里以dnsmasq为例:
首先,安装dnsmasq:
sudo apt update
sudo apt install dnsmasq
然后,编辑dnsmasq的配置文件/etc/dnsmasq.conf
,添加以下内容:
interface=enp0s25
listen-address=192.168.1.254 # 替换为你的有线网卡的IP地址
dhcp-range=192.168.1.100,192.168.1.200,12h # 设置DHCP分配的IP范围及租期
dhcp-option=option:router,192.168.1.254 # 设置默认网关为有线网卡的IP地址
dhcp-option=option:dns-server,192.168.1.254 # 设置首选DNS服务器为有线的IP地址
保存并关闭配置文件后,重启dnsmasq服务:
sudo systemctl restart dnsmasq
确保防火墙设置允许通过有线网卡的数据包。
- 配置无线网卡(wlp3s0)的路由转发功能,以便将有线网卡连接的主机引导到外网。你需要启用IP转发,并在无线接口上配置NAT规则。
首先,编辑内核参数来启用IP转发:
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
然后,配置iptables进行NAT转换:
sudo iptables -t nat -A POSTROUTING -o wlp3s0 -j MASQUERADE
这条命令会将所有从有线网卡发出的数据包源地址转换为无线网卡的IP地址,从而实现NAT功能。
请注意,以上步骤是基于常见的Linux发行版和网络环境进行的假设。根据你的实际环境和操作系统版本,可能需要稍作调整。此外,在进行这些更改之前,请确保备份相关配置文件,以防万一出现问题需要恢复原始设置。
完成上述配置后,理论上接在有线网卡上的主机应该能够通过无线网卡访问外部网络了。然而,由于网络环境的复杂性和不可预测性,如果遇到问题,建议逐一排查并解决潜在的网络故障点。
1. 我的配置文件
# and network interface eth1
port=53
listen-address=127.0.0.1,192.168.100.18
interface=enp0s25
# disable forwarding of non-routed address
# disable forwarding names without the main domain.com
# automatically append the domain part to simple names
# disable dnsmasq to read /etc/resolv.conf file
domain-needed
bogus-priv
expand-hosts
no-resolv
# upstream DNS server for non-local domain names
# using Cloudflare and google public DNS
server=114.114.114.114
#server=8.8.8.8
# define the domain for dnsmasq
domain=debian
address=/883868.xyz/192.168.100.18
# enable DNS Cache and adjust cache-size
cache-size=1000
# enable DHCP via dnsmasq
# define lease db file
# make the dhcp server as an authoritative
dhcp-range=enp0s25,192.168.100.80,192.168.100.150,12h
dhcp-leasefile=/var/lib/misc/dnsmasq.leases
dhcp-authoritative
你的dnsmasq
配置文件进行了多项自定义设置,下面是对这些设置的解读:
-
端口和监听地址:
port=53
:指定dnsmasq监听的端口为53,这是DNS服务的标准端口。listen-address=127.0.0.1,192.168.100.18
:dnsmasq将在这两个地址上监听DNS查询。127.0.0.1
是本地回环地址,192.168.100.18
是你的有线网卡enp0s25
的IP地址(假设这是你希望对外提供DNS服务的地址)。
-
接口和路由:
interface=enp0s25
:指定dnsmasq只在该接口上监听DNS请求。注意,这通常与listen-address
结合使用,但如果你只想在特定接口上提供服务且该接口有多个IP,则这个设置很有用。
-
DNS查询行为:
domain-needed
:启用此选项后,dnsmasq将仅响应包含指定域名的查询。这有助于减少垃圾查询和提高安全性。bogus-priv
:忽略对私有地址空间的反向查询(如192.168.x.x等),这有助于防止DNS欺骗。expand-hosts
:自动在查询的域名后添加本地域名后缀(如果配置了domain=
选项)。no-resolv
:dnsmasq不会读取/etc/resolv.conf
文件来获取上游DNS服务器。你需要在配置文件中明确指定。
-
上游DNS服务器:
server=114.114.114.114
:设置了一个上游DNS服务器(Cloudflare的公共DNS)。如果dnsmasq无法解析某个域名,它会将查询转发到这个服务器。
-
域名和地址映射:
domain=debian
:设置了一个本地域名后缀,当查询的域名不包含点号时,dnsmasq会自动在其后添加这个后缀。address=/883868.xyz/192.168.100.18
:为特定域名(883868.xyz)设置了一个静态IP地址映射。
-
DNS缓存:
cache-size=1000
:设置了DNS缓存的大小。较大的缓存可以提高查询效率,但也会占用更多内存。
-
DHCP服务:
dhcp-range=enp0s25,192.168.100.80,192.168.100.150,12h
:在enp0s25
接口上启用DHCP服务,并分配IP地址范围从192.168.100.80到192.168.100.150,租期为12小时。dhcp-leasefile=/var/lib/misc/dnsmasq.leases
:指定DHCP租约文件的存储位置。dhcp-authoritative
:告诉dnsmasq作为DHCP的权威服务器,不转发DHCP请求到其他服务器。
请注意,你的配置中有几个地方可能需要根据你的实际环境进行调整:
- 确保
enp0s25
是你想要提供DHCP和DNS服务的有线网卡的正确接口名称。 - 如果你打算让有线网卡上的设备能够访问外部网络,你还需要配置路由转发(
net.ipv4.ip_forward=1
)和NAT(如使用iptables的MASQUERADE规则)。 - 如果你的有线网卡上的设备需要解析非本地域名的查询,确保你的上游DNS服务器(这里是Cloudflare的114.114.114.114)是可用的,并且没有被防火墙或安全组策略阻止。
domain=debian
这一设置可能需要根据你的实际需求进行调整。如果你不打算使用本地域名后缀,可以省略此设置。