使用Ubuntu Linux构建SOHO路由器的完整指南

本文详细介绍了如何利用Ubuntu 14.04 LTS构建多功能SOHO路由器,涵盖网络接口配置、IPTABLES规则设置、DHCP/DNS服务部署及安全防护措施,适合家庭和小型办公室网络环境。

如何用Ubuntu Linux创建SOHO路由器

Joff Thyer //

本文交叉发布于Packet Header(2016年3月1日)。
在Security Weekly第452集中,我演示了如何构建自有小型办公室/家庭办公室有线路由器的技术环节。本篇博客将列出核心组件并扩展技术细节。目标是构建支持IPv4网络地址转换(NAT)、运行ISC Bind9域名服务及ISC DHCP服务的内网多网段有线路由器。

注意:相关配置文件可在 https://bitbucket.org/jsthyer/soho_router 获取。

硬件要求与系统安装

选择支持Ubuntu 14.04.4 LTS服务器的双网卡或多网卡计算机,建议至少1024MB内存和16GB硬盘空间。推荐硬件包括Soekris Net6501或Netgate RCC-VE 2440。首先安装Ubuntu 14.04.4 LTS服务器(64位),然后安装以下软件包:

1
2
3
apt-get install bind9
apt-get install isc-dhcp-server
apt-get install ntp

启用IP转发与内核配置

关键步骤是启用内核IP转发,否则无法路由数据包。在/etc/sysctl.conf文件末尾添加以下行并重启系统(同时禁用IPv6):

1
2
net.ipv4.ip_forward=1
net.ipv6.conf.all.disable_ipv6=1

网络接口配置

路由器配置核心是正确设置网络接口和IPTABLES规则。假设公网地址为静态255.1.1.2(子网掩码/30),ISP设备地址为255.1.1.1。WAN接口为eth0,内部网络使用三个网段:10.1.1.0/24、10.1.2.0/24和10.1.3.0/24。配置文件/etc/network/interfaces需包含:

  • eth0的静态/IPDHCP配置
  • RFC1918网络流量的空路由
  • 组播流量(224.0.0.0/4)丢弃规则
  • 引用IPTABLES规则文件/etc/iptables.rules

IPTABLES规则配置

NAT配置

/etc/iptables.rules中,NAT部分仅需一行命令(假设内网为10.0.0.0/8,公网接口为eth0)。可选添加Squid代理重定向规则(TCP 80→3128)。

过滤规则

过滤规则分为四部分:

  1. INPUT:路由器接收流量
    • 接受环回接口流量
    • 接受DNS(bind9)流量
    • 接受内网DNS/DHCP/NTP/Squid流量
    • 接受ICMP协议
  2. OUTPUT:路由器发送流量
    • 允许DNS、WHOIS(TCP 43)、软件更新(HTTP/HTTPS)、NTP、DHCP INFORM及ICMP
  3. FORWARD:跨路由器转发流量
    • 允许所有IPv4 TCP/UDP/ICMP流量至互联网
  4. LOG_DROPS:记录丢弃流量
    • 丢弃eth0源地址为0.0.0.0/8、RFC1918地址、组播地址的流量
    • 丢弃分片IP流量、TTL<4的包、TCP/UDP端口0的包及无效TCP标志包

最终通过syslog LOCAL7设施记录丢弃数据包,需配置/etc/rsyslog.d/30-iptables.conf实现日志写入。

DHCP与DNS服务

DHCP配置

/etc/dhcp/dhcpd.conf中为三个内网接口(eth1/eth2/eth3)提供IP服务:

  • 地址池从x.x.x.50开始(保留静态地址空间)
  • 租期30天(2,592,000秒)

DNS配置

默认Bind9为缓存服务器,可选配置:

  • 向上游DNS(如Google DNS 8.8.8.8)转发查询
  • 限制递归查询客户端范围
  • 集成dshield恶意域名列表(解析至127.0.0.1)

通过脚本get_malware_domains.sh获取https://isc.sans.edu/feeds/suspiciousdomains_Low.txt 并转换为Bind9配置格式。

所有配置文件示例均提供压缩包支持。祝部署顺利!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计