DNS与VPN配置完整指南
目录
BIND DNS服务器配置
BIND简介与安装
BIND(Berkeley Internet Name Domain)是互联网上最广泛使用的DNS服务器软件,支持权威DNS和递归DNS功能。
安装命令:
- Ubuntu/Debian: sudo apt install bind9
- CentOS/RHEL: sudo yum install bind 或 sudo dnf install bind
配置权威域名服务器
1. 定义区域
编辑 /etc/bind/named.conf.local:
zone "mycompany.local" {
type master;
file "/etc/bind/db.mycompany.local";
};
2. 创建区域文件
创建 /etc/bind/db.mycompany.local:
$TTL 604800
@ IN SOA ns1.mycompany.local. admin.mycompany.local. (
2024111401 ; 序列号
1H ; 刷新间隔
15M ; 重试间隔
1W ; 过期时间
1H ) ; 否定TTL
IN NS ns1.mycompany.local.
ns1 IN A 192.168.1.10
www IN A 192.168.1.20
mail IN A 192.168.1.30
@ IN A 192.168.1.40
ftp IN CNAME www.mycompany.local.
IN MX 10 mail.mycompany.local.
3. 验证与重启
sudo named-checkconf
sudo named-checkzone mycompany.local /etc/bind/db.mycompany.local
sudo systemctl restart bind9
配置递归解析器
编辑 /etc/bind/named.conf.options:
options {
directory "/var/cache/bind";
listen-on { any; };
allow-query { any; };
recursion yes;
allow-recursion { any; };
forwarders {
8.8.8.8;
8.8.4.4;
};
dnssec-validation auto;
};
DNS查询问题诊断
dig与nslookup差异分析
现象: dig查询成功,nslookup返回SERVFAIL
原因分析: 1. nslookup查询流程: - 第一步:查询A记录 - 第二步:检查AA标志后查询NS记录 - 如果NS查询被拒绝,返回SERVFAIL
- dig查询流程:
- 直接返回查询结果,不进行额外验证
测试命令:
# 模拟nslookup第一步
dig @192.168.0.20 www.onlinenet.com.cn A
# 模拟nslookup第二步
dig @192.168.0.20 onlinenet.com.cn NS
跨网段查询问题
场景: 192.168.0.0/24网段查询正常,192.168.8.0/24网段查询失败
解决方案: 1. 检查BIND配置:
allow-query {
localhost;
192.168.0.0/24;
192.168.8.0/24;
};
- 检查防火墙规则:
sudo iptables -A INPUT -s 192.168.8.0/24 -p udp --dport 53 -j ACCEPT
sudo iptables -A INPUT -s 192.168.8.0/24 -p tcp --dport 53 -j ACCEPT
VPN对DNS查询的影响
PPTP VPN的问题
- MTU问题:PPTP隧道开销约40字节,有效MTU约1400字节
- UDP包分片:大DNS响应包可能被分片,分片在VPN中易丢失
- NAT穿越问题:使用GRE协议,通过NAT设备可能有问题
解决方案:
# 调整客户端MTU
sudo ip link set dev ppp0 mtu 1400
# BIND限制响应大小
edns-udp-size 512;
max-udp-size 512;
L2TP VPN的问题
- 更大的封装开销:
- L2TP头:8-12字节
- IPsec头:20-38字节
- UDP封装:8字节
- 总开销:36-58字节
- IPsec策略过滤:可能丢弃分片包
- NAT-T问题:使用UDP 4500端口,可能受网络设备限制
诊断命令:
# 测试MTU
ping -M do -s 1400 -c 2 192.168.0.20
# 测试不同缓冲区大小
for size in 512 1024 1400; do
dig @192.168.0.20 www.onlinenet.com.cn A +bufsize=$size
done
MikroTik OpenVPN服务器配置
创建SSL证书
方法一:命令行方式
# 清理现有证书
/certificate remove [find]
# 创建CA证书
add name=ovpn-ca common-name="OpenVPN CA" key-size=2048 days-valid=3650 key-usage=key-cert-sign,crl-sign
sign ovpn-ca
# 创建服务器证书
add name=ovpn-server common-name="OpenVPN Server" key-size=2048 days-valid=3650
sign ovpn-server ca=ovpn-ca
# 创建客户端证书
add name=ovpn-client1 common-name="OpenVPN Client" key-size=2048 days-valid=3650
sign ovpn-client1 ca=ovpn-ca
# 验证证书
print
方法二:WinBox图形界面
- System → Certificates
- 创建CA证书:
- 点击"+",Name:
ovpn-ca,Common Name:OpenVPN CA - Key Usage: 勾选
key-cert-sign和crl-sign - 右键证书 → Sign
- 创建服务器证书:
- 点击"+",Name:
ovpn-server,Common Name:OpenVPN Server - 右键证书 → Sign → 选择CA:
ovpn-ca - 创建客户端证书:
- 点击"+",Name:
ovpn-client1,Common Name:OpenVPN Client - 右键证书 → Sign → 选择CA:
ovpn-ca
配置OpenVPN服务器
# 创建IP地址池
/ip pool add name=ovpn-pool ranges=192.168.10.100-192.168.10.200
# 创建PPP Profile
/ppp profile add name=ovpn-profile local-address=192.168.10.1 remote-address=ovpn-pool use-encryption=yes dns-server=192.168.0.20
# 创建用户
/ppp secret add name=ovpn-user password=YourSecurePassword123 profile=ovpn-profile service=ovpn
# 启用OpenVPN服务器
/interface ovpn-server server set enabled=yes certificate=ovpn-server default-profile=ovpn-profile auth=sha1 cipher=blowfish128,aes128,aes192,aes256
网络与路由配置
# 为OVPN接口分配IP
/ip address add address=192.168.10.1/24 interface=ovpn-in1
# 添加路由
/ip route add dst-address=192.168.0.0/24 gateway=192.168.10.1
/ip route add dst-address=192.168.8.0/24 gateway=192.168.10.1
防火墙配置
# 允许OpenVPN连接
/ip firewall filter add chain=input protocol=tcp dst-port=1194 action=accept comment="OpenVPN TCP"
/ip firewall filter add chain=input protocol=udp dst-port=1194 action=accept comment="OpenVPN UDP"
# 允许VPN客户端访问内网
/ip firewall filter add chain=forward in-interface=ovpn-in1 out-interface=bridge action=accept comment="OVPN to LAN"
/ip firewall filter add chain=forward in-interface=bridge out-interface=ovpn-in1 action=accept comment="LAN to OVPN"
# NAT配置
/ip firewall nat add chain=srcnat src-address=192.168.10.0/24 out-interface=bridge action=masquerade comment="OVPN NAT"
客户端配置
- 导出客户端配置:
/interface ovpn-server server export-client name=ovpn-client1
- 客户端配置文件 (client.ovpn):
client
dev tun
proto udp
remote your.mikrotik.ip 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
auth SHA1
verb 3
<ca>
-----BEGIN CERTIFICATE-----
[CA证书内容]
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
[客户端证书内容]
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
[客户端私钥内容]
-----END PRIVATE KEY-----
</key>
故障排除
证书问题
问题: 证书不显示信任标志(T)
解决方案: 1. 确保证书链完整:
/certificate print detail
-
检查CA证书的Key Usage包含
key-cert-sign -
重新签署证书:
sign ovpn-server ca=ovpn-ca
sign ovpn-client1 ca=ovpn-ca
连接问题
问题: OpenVPN客户端无法连接
检查步骤: 1. 验证服务器状态:
/interface ovpn-server server print
- 检查活动连接:
/ppp active print
- 查看日志:
/log print
DNS查询问题
问题: VPN连接后DNS查询失败
诊断命令:
# 在VPN客户端测试
nslookup -vc www.onlinenet.com.cn 192.168.0.20
dig @192.168.0.20 www.onlinenet.com.cn A +tcp
dig @192.168.0.20 www.onlinenet.com.cn A +notcp
# 在DNS服务器抓包
sudo tcpdump -i any -n port 53 and net 192.168.10.0/24
解决方案: 1. 检查PPP Profile中的DNS设置 2. 验证路由是否正确 3. 检查防火墙规则 4. 调整MTU设置
总结
本文档涵盖了从BIND DNS服务器配置到VPN环境下DNS问题诊断的完整流程,以及MikroTik OpenVPN服务器的详细配置步骤。通过遵循这些指南,可以建立稳定可靠的DNS服务和VPN连接,确保跨网段的网络服务正常运行。