在互联网从IPv4向IPv6过渡的大背景下,搭建IPv6服务器已成为网络工程师和系统管理员的必备技能。与传统的IPv4环境相比,IPv6带来了更大的地址空间、更简化的报头结构和更高效的路由机制,但同时也引入了新的配置方式和协议支持要求。
选择Ubuntu作为IPv6服务器平台主要基于以下几点考虑:
提示:虽然Windows Server和RouterOS也支持IPv6,但在功能完整性和灵活性上都不及Linux系统。特别是对于需要同时支持多种IPv6服务(如PPPoE、DHCPv6、RA等)的场景,Linux是更优选择。
建议使用Ubuntu Server 20.04 LTS版本,长期支持版能获得更稳定的更新和维护。安装时注意:
安装完成后首先执行系统更新:
bash复制sudo apt update && sudo apt upgrade -y
编辑/etc/sysctl.conf文件,确保以下参数设置正确:
bash复制net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.bindv6only=0
net.ipv4.ip_nonlocal_bind=1
net.ipv6.ip_nonlocal_bind=1
应用配置:
bash复制sudo sysctl -p
静态IPv6地址配置示例(/etc/netplan/00-installer-config.yaml):
yaml复制network:
version: 2
ethernets:
eth0:
addresses:
- 2001:db8::1/64
gateway6: 2001:db8::ffff
nameservers:
addresses: [2001:4860:4860::8888]
应用网络配置:
bash复制sudo netplan apply
bash复制sudo apt install ppp rp-pppoe -y
/etc/ppp/options核心配置:
code复制ipv6 ,
+ipv6
require-chap
login
mtu 1492
mru 1492
用户认证配置(/etc/ppp/chap-secrets):
code复制# 格式:用户名 * 密码 *
user1 * password1 *
user2 * password2 *
启动PPPoE服务器:
bash复制sudo pppoe-server -I eth0 -L 2001:db8::1 -R 2001:db8::100 -N 100
注意:-L指定服务器IPv6地址,-R指定分配给客户端的起始地址,-N指定最大客户端数
bash复制sudo apt install isc-dhcp-server -y
code复制subnet6 2001:db8::/64 {
range6 2001:db8::1000 2001:db8::2000;
option dhcp6.name-servers 2001:4860:4860::8888;
option dhcp6.domain-search "example.com";
}
启动服务:
bash复制sudo systemctl start isc-dhcp-server6
bash复制sudo apt install radvd -y
code复制interface eth0 {
AdvSendAdvert on;
prefix 2001:db8::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};
启动服务:
bash复制sudo systemctl start radvd
基本IPv6防火墙规则示例:
bash复制# 允许ICMPv6(必需)
ip6tables -A INPUT -p icmpv6 -j ACCEPT
# 允许已建立的连接
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许SSH
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
# 默认策略
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
监控IPv6连接状态:
bash复制ss -6tulnp
监控IPv6路由表:
bash复制ip -6 route show
检查步骤:
bash复制ps aux | grep pppoe-server
bash复制ping6 2001:db8::1
排查方法:
bash复制journalctl -u isc-dhcp-server6
bash复制tcpdump -i eth0 port 547 -vv
诊断命令:
bash复制traceroute6 example.com
ip -6 route get 2001:db8::1
bash复制echo 3 > /proc/sys/net/ipv4/tcp_fastopen
bash复制echo "net.ipv6.tcp_window_scaling=1" >> /etc/sysctl.conf
echo "net.ipv6.tcp_sack=1" >> /etc/sysctl.conf
bash复制ip6tables -A INPUT -p icmpv6 --icmpv6-type 128 -j ACCEPT # 仅允许echo请求
bash复制echo "net.ipv6.conf.all.use_tempaddr=2" >> /etc/sysctl.conf
bash复制sudo apt update && sudo apt upgrade -y
典型拓扑:
简易方案:
bash复制systemctl list-units --type=service --state=running
bash复制tar czvf /backup/ipv6_config_$(date +%F).tar.gz /etc/ppp /etc/dhcp /etc/radvd.conf
在长期运营IPv6服务器的过程中,我发现保持配置文档的完整性和版本控制非常重要。建议使用Git管理所有配置文件变更,每次修改前做好备份。另外,IPv6网络环境下的安全问题往往被忽视,需要特别关注防火墙规则和服务的访问控制。