启用了 IPv6 的服务器应用程序可以既处理 IPv4 请求又处理 IPv6 请求,也可以仅处理 IPv6 请求。服务器始终通过 IPv6 套接字处理请求。另外,服务器还与相应的客户机使用相同的协议。要为 IPv6 添加或修改服务,请使用服务管理工具 (Service Management Facility, SMF) 中的命令。
有关 SMF 命令的信息,请参阅《系统管理指南:基本管理》中的“SMF 命令行管理实用程序”。
有关使用 SMF 配置在 SCTP 上运行的 IPv4 服务清单的示例任务,请参阅如何添加使用 SCTP 协议的服务。
要配置 IPv6 服务,必须确保该服务 inetadm 配置文件中的 proto 字段中列出了相应的值:
对于既处理 IPv4 请求又处理 IPv6 请求的服务,请选择 tcp6、udp6 或 sctp6。如果 proto 的值为 tcp6、udp6 或 sctp6,则会导致 inetd 向服务器传递 IPv6 套接字。服务器中包含映射到 IPv4 的地址以备 IPv4 客户机发出请求。
对于仅处理 IPv6 请求的服务,请选择 tcp6only 或 udp6only。如果 proto 的值为 tcp6only 或 udp6only,inetd 会向服务器传递 IPv6 套接字。
如果用其他实现来替代 Oracle Solaris : 命令,则必须验证所实现的服务是否支持 IPv6。如果该服务不支持 IPv6,则必须将 proto 值指定为 tcp、udp 或 sctp。
下面是针对 echo 服务清单运行 inetadm 时生成的配置文件,该服务清单既支持 IPv4 又支持 IPv6,并且在 SCTP 上运行:
# inetadm -l svc:/network/echo:sctp_stream SCOPE NAME=VALUE name="echo" endpoint_type="stream" proto="sctp6" isrpc=FALSE wait=FALSE exec="/usr/lib/inet/in.echod -s" user="root" default bind_addr="" default bind_fail_max=-1 default bind_fail_interval=-1 default max_con_rate=-1 default max_copies=-1 default con_rate_offline=-1 default failrate_cnt=40 default failrate_interval=60 default inherit_env=TRUE default tcp_trace=FALSE default tcp_wrappers=FALSE |
要更改 proto 字段的值,请使用以下语法:
# inetadm -m FMRI proto="transport-protocols" |
随 Oracle Solaris : 软件一起提供的所有服务器都只需要一个用来将 proto 指定为 tcp6、udp6 或 sctp6 的配置文件项。但是,远程 shell 服务器 (shell) 和远程执行服务器 (exec) 现在由单个服务实例组成,该服务实例要求 proto 值中同时包含 tcp 和 tcp6only 值。例如,要为 shell 设置 proto 值,可发出以下命令:
# inetadm -m network/shell:default proto="tcp,tcp6only" |
有关写入使用套接字且启用了 IPv6 的服务器的更多详细信息,请参见《编程接口指南》中的“IPv6 extensions to the Socket API”。
在为 IPv6 添加或修改服务时,请记住以下几点:
需要将 proto 值指定为 tcp6、sctp6 或 udp6,以便既支持 IPv4 连接又支持 IPv6 连接。如果将 proto 值指定为 tcp、sctp 或 udp,则该服务仅使用 IPv4。
尽管可以为 inetd 添加使用一对多样式的 SCTP 套接字的服务实例,但是建议不要这样做。inetd 不能处理一对多样式的 SCTP 套接字。
如果某个服务因其 wait-status 或 exec 属性不同而需要两项,则必须从初始服务创建两个实例/服务。