DNS与VPN配置完整指南

目录

BIND DNS服务器配置

BIND简介与安装

BIND(Berkeley Internet Name Domain)是互联网上最广泛使用的DNS服务器软件,支持权威DNS和递归DNS功能。

安装命令: - Ubuntu/Debian: sudo apt install bind9 - CentOS/RHEL: sudo yum install bindsudo 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

  1. dig查询流程:
  2. 直接返回查询结果,不进行额外验证

测试命令:

# 模拟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;
};
  1. 检查防火墙规则:
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的问题

  1. MTU问题:PPTP隧道开销约40字节,有效MTU约1400字节
  2. UDP包分片:大DNS响应包可能被分片,分片在VPN中易丢失
  3. NAT穿越问题:使用GRE协议,通过NAT设备可能有问题

解决方案:

# 调整客户端MTU
sudo ip link set dev ppp0 mtu 1400

# BIND限制响应大小
edns-udp-size 512;
max-udp-size 512;

L2TP VPN的问题

  1. 更大的封装开销
  2. L2TP头:8-12字节
  3. IPsec头:20-38字节
  4. UDP封装:8字节
  5. 总开销:36-58字节
  6. IPsec策略过滤:可能丢弃分片包
  7. 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图形界面

  1. System → Certificates
  2. 创建CA证书
  3. 点击"+",Name: ovpn-ca,Common Name: OpenVPN CA
  4. Key Usage: 勾选key-cert-signcrl-sign
  5. 右键证书 → Sign
  6. 创建服务器证书
  7. 点击"+",Name: ovpn-server,Common Name: OpenVPN Server
  8. 右键证书 → Sign → 选择CA: ovpn-ca
  9. 创建客户端证书
  10. 点击"+",Name: ovpn-client1,Common Name: OpenVPN Client
  11. 右键证书 → 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"

客户端配置

  1. 导出客户端配置
/interface ovpn-server server export-client name=ovpn-client1
  1. 客户端配置文件 (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
  1. 检查CA证书的Key Usage包含key-cert-sign

  2. 重新签署证书:

sign ovpn-server ca=ovpn-ca
sign ovpn-client1 ca=ovpn-ca

连接问题

问题: OpenVPN客户端无法连接

检查步骤: 1. 验证服务器状态:

/interface ovpn-server server print
  1. 检查活动连接:
/ppp active print
  1. 查看日志:
/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连接,确保跨网段的网络服务正常运行。