JBoss7配置之支持IPv4和IPv6双栈环境

由于实验室项目需要,将EJB 3.0的程序部署在JBoss AS 7.1.1.Final中,并要求支持IPv4与IPv6。但其默认配置并不支持IPv6,于是查阅JBoss Community Documentation,即官方文档,在5.4.1 Interfaces and ports节中找到了相关介绍,研究后对JBoss进行配置修改,使JBoss中EJB 3.0的程序能够在IPv4和IPv6双栈环境下正常运行,包括客户端在IPv4环境下获取Remote远程接口对象,调用远程对象的方法收发IPv6的udp报文等。本文不细讲EJB程序,只介绍如何配置JBoss使其支持IPv4和IPv6双栈环境。

文章结构

第一部分——JBoss7.1官方文档中关于IPv6部分的说明

第二部分——项目中针对JBoss配置文件修改的详细介绍


第一部分——JBoss7.1官方文档中关于IPv6部分的说明

5.4.1 Interfaces and ports

Interface declarations

domain.xml, host.xml 和standalone.xml 都包含声明接口的部分。当我们看这些在XML文件中接口声明时,就会发现接口的选择条件(selection criteria)有两种类型:一种是单独的XML元素,接口绑定到通配符地址;另外一种是接口或者地址有一个或者多个特征值需要满足。

举例说明,首先是一个接口条件选择的例子,每个接口都有特定的IP地址:

<interfaces>
  <interface name="management">
    <inet-address value="127.0.0.1"/>
  </interface>
  <interface name="public">
    <inet-address value="127.0.0.1"/>
  </interface>
</interfaces>

接着是使用通配符的例子:

<interface name="global">
  <!-- Use the wildcard address -->
  <any-address/>
</interface>

<interface name="ipv4-global">
  <!-- Use the IPv4 wildcard address -->
  <any-ipv4-address/>
</interface>

<interface name="ipv6-global">
  <!-- Use the IPv6 wildcard address -->
  <any-ipv6-address/>
</interface>

<interface name="external">
  <nic name="eth0"/>
</interface>

Socket Binding Groups

JBoss AS 7中socket的配置类似于interface的声明,Sockets用一个逻辑名来声明,可以在整个配置中引用。 多个Sockets声明可以用一个特定的名字声明成为一个组。这样在配置一个在管理域里的server group时可以方便的引用一个特定的socket binding group。Socket binding group通过接口逻辑名来引用接口:

<socket-binding-group name="standard-sockets" default-interface="public">
  <socket-binding name="jndi" port="1099"/>
  <socket-binding name="jmx-connector-registry" port="1090"/>
  <socket-binding name="jmx-connector-server" port="1091"/>
  <socket-binding name="http" port="8080"/>
  <socket-binding name="https" port="8443"/>
  <socket-binding name="jacorb" port="3528"/>
  <socket-binding name="jacorb-ssl" port="3529"/>
  <socket-binding name="osgi-http" port="8090"/>
  <socket-binding name="remoting" port="4447"/>
  <socket-binding name="txn-recovery-environment" port="4712"/>
  <socket-binding name="txn-status-manager" port="4713"/>
  <socket-binding name="messaging" port="5445"/>
  <socket-binding name="messaging-throughput" port="5455"/>
</socket-binding-group>

一个socket binding 包含以下信息:

  • name – socket配置的逻辑名,可以在配置的其他任何地方引用。
  • port –  这个配置中socket要绑定到的基础端口 (注意server可以通过配置增减所有端口值来覆盖这一配置。)
  • interface (可选) – 配置中socket要绑定接口的逻辑名 (参考上面的接口声明)。如果没有指定, socket binding group 配置元素中的default-interface属性值将会被使用。
  • multicast-address (可选) --如果socket用于多播,将会使用这个多播地址。
  • multicast-port (可选) –  如果socket用于多播,将会使用这个多播端口
  • fixed-port (可选, 默认是false) – 如果是true,  端口值将一直使用这个值,这个值不会被使用增减端口值而覆盖。

IPv4 versus IPv6

JBoss AS7 supports the use of both IPv4 and IPv6 addresses. By default, AS7 is configured for use in an IPv4 network and so if you are running AS7 in an IPv4 network, no changes are required. If you need to run AS7 in an IPv6 network, the changes required are minimal and involve changing the JVM stack and address preferences, and adjusting any interface IP address values specified in the configuration (standalone.xml or domain.xml).

Stack and address preference

The system properties java.net.preferIPv4Stack and java.net.preferIPv6Addresses are used to configure the JVM for use with IPv4 or IPv6 addresses. With AS7, in order to run using IPv4 addresses, we need to specify java.net.preferIPv4Stack=true; in order to run the AS7 with IPv6 addresses, we need to specify java.net.preferIPv4Stack=false (the JVM default) and java.net.preferIPv6Addresses=true. The latter ensures that any hostname to IP address conversions always return IPv6 address variants.

These system properties are conveniently set by the JAVA_OPTS environment variable, defined in the standalone.conf (or domain.conf) file. For example, to change the IP stack preference from its default of IPv4 to IPv6, edit the standalone.conf (or domain.conf) file and change its default IPv4 setting:

if [ "x$JAVA_OPTS" = "x" ]; then
JAVA_OPTS=" ... -Djava.net.preferIPv4Stack=true ..."
...

to an IPv6 suitable setting:

if [ "x$JAVA_OPTS" = "x" ]; then
JAVA_OPTS=" ... -Djava.net.preferIPv4Stack=false -Djava.net.preferIPv6Addresses=true ..."
...

IP address literals

To change the IP address literals referenced in standalone.xml (or domain.xml), first visit the interface declarations and ensure that valid IPv6 addresses are being used as interface values. For example, to change the default configuration in which the loopback interface is used as the primary interface, change from the IPv4 loopback address:

<interfaces>
  <interface name="management">
    <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
  </interface>
  <interface name="public">
    <inet-address value="${jboss.bind.address:127.0.0.1}"/>
  </interface>
</interfaces>

to the IPv6 loopback address:

<interfaces>
  <interface name="management">
    <inet-address value="${jboss.bind.address.management:[::1]}"/>
  </interface>
  <interface name="public">
    <inet-address value="${jboss.bind.address:[::1]}"/>
  </interface>
</interfaces>

Note that when embedding IPv6 address literals in the substitution expression, square brackets surrounding the IP address literal are used to avoid ambiguity. This follows the convention for the use of IPv6 literals in URLs.
    Over and above making such changes for the interface definitions, you should also check the rest of your configuration file and adjust IP address literals from IPv4 to IPv6 as required.


第二部分——项目中针对JBoss配置文件修改的详细介绍

根据如上的介绍,为了使JBoss支持IPv6,我们需要修改JBoss的两个配置文件。其一,修改standalone.xml中接口声明部分和socket端口绑定;其二,修改standalone.conf里面的JVM stack和address preferences。

1. standalone.xml,文件路径:$JBOSS-HOME/standalone/configuration

打开后可看到接口声明部分(interfaces)和socket端口绑定部分(socket-binding-group—)初始状态如下。接口声明中management、public、unsecure都指定的是jboss的本地回环地址,socket绑定默认接口就是public,前三个指定的是management接口,unsecure接口未使用。

<interfaces>
        <interface name="management">
            <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
        </interface>
        <interface name="public">
            <inet-address value="${jboss.bind.address:127.0.0.1}"/>
        </interface>
        <interface name="unsecure">
            <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
        </interface>
    </interfaces>

    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"/>
        <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
        <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"/>
        <socket-binding name="ajp" port="8009"/>
        <socket-binding name="http" port="8080"/>
        <socket-binding name="https" port="8443"/>
        <socket-binding name="osgi-http" interface="management" port="8090"/>
        <socket-binding name="remoting" port="4447"/>
        <socket-binding name="txn-recovery-environment" port="4712"/>
        <socket-binding name="txn-status-manager" port="4713"/>
        <outbound-socket-binding name="mail-smtp">
            <remote-destination host="localhost" port="25"/>
        </outbound-socket-binding>
    </socket-binding-group>

为满足JBoss能够支持IPv4和IPv6双栈环境,则要将接口的选择条件修改为绑定到通配符状态,即<any-address/>,而socket绑定部分可不做修改,

接口声明部分修改后如下:

<interfaces>
        <interface name="management">
            <any-address/>
        </interface>
        <interface name="public">
            <any-address/>
        </interface>
        <interface name="unsecure">
            <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
        </interface>
    </interfaces>

2. standalone.conf.bat,文件路径:$JBOSS-HOME/bin

注意这里修改的不是standalone.conf文件,因为修改该文件并没有使IPv6 address生效,亲测只有修改standalone.conf.bat文件才会生效。修改方法和第一部分里面Stack and address preference小节介绍一样,就是将-Djava.net.preferIPv4Stack=true修改为-Djava.net.preferIPv4Stack=false -Djava.net.preferIPv6Addresses=true即可,这样JVM启动的时候默认的是IPv6格式的地址,查看打印输出即可验证正确与否。

Calling "K:\jboss-as-7.1.1.Final\bin\standalone.conf.bat"
===============================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: K:\jboss-as-7.1.1.Final

  JAVA: C:\Program Files (x86)\Java\jdk1.7.0_79\bin\java

  JAVA_OPTS: -XX:+TieredCompilation -Dprogram.name=standalone.bat -Xms64M -Xmx51
2M -XX:MaxPermSize=256M -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.se
rver.gcInterval=3600000 -Djava.net.preferIPv4Stack=false -Djava.net.preferIPv6Ad
dresses=true -Dorg.jboss.resolver.warning=true -Djboss.modules.system.pkgs=org.j
boss.byteman -Djboss.server.default.config=standalone.xml

===============================================================================

22:39:47,729 信息    [org.jboss.modules] JBoss Modules version 1.1.1.GA
22:39:48,182 INFO  [org.jboss.msc] JBoss MSC version 1.0.2.GA
22:39:48,322 INFO  [org.jboss.as] JBAS015899: JBoss AS 7.1.1.Final "Brontes" sta
rting
22:39:50,572 INFO  [org.xnio] XNIO Version 3.0.3.GA
22:39:50,572 INFO  [org.jboss.as.server] JBAS015888: Creating http management se
rvice using socket-binding (management-http)
22:39:50,604 INFO  [org.xnio.nio] XNIO NIO Implementation Version 3.0.3.GA
22:39:50,619 INFO  [org.jboss.remoting] JBoss Remoting version 3.2.3.GA
22:39:50,666 INFO  [org.jboss.as.logging] JBAS011502: Removing bootstrap log han
dlers
22:39:50,682 INFO  [org.jboss.as.clustering.infinispan] (ServerService Thread Po
ol -- 31) JBAS010280: Activating Infinispan subsystem.
22:39:50,729 INFO  [org.jboss.as.naming] (ServerService Thread Pool -- 38) JBAS0
11800: Activating Naming Subsystem
22:39:50,744 INFO  [org.jboss.as.configadmin] (ServerService Thread Pool -- 26)
JBAS016200: Activating ConfigAdmin Subsystem
22:39:50,776 INFO  [org.jboss.as.connector] (MSC service thread 1-1) JBAS010408:
 Starting JCA Subsystem (JBoss IronJacamar 1.0.9.Final)
22:39:50,776 INFO  [org.jboss.as.security] (ServerService Thread Pool -- 44) JBA
S013101: Activating Security Subsystem
22:39:50,807 INFO  [org.jboss.as.mail.extension] (MSC service thread 1-1) JBAS01
5400: Bound mail session [java:jboss/mail/Default]
22:39:50,791 INFO  [org.jboss.as.naming] (MSC service thread 1-8) JBAS011802: St
arting Naming Service
22:39:50,885 INFO  [org.jboss.as.webservices] (ServerService Thread Pool -- 48)
JBAS015537: Activating WebServices Extension
22:39:51,010 INFO  [org.jboss.as.osgi] (ServerService Thread Pool -- 39) JBAS011
940: Activating OSGi Subsystem
22:39:51,010 INFO  [org.jboss.as.connector.subsystems.datasources] (ServerServic
e Thread Pool -- 27) JBAS010403: Deploying JDBC-compliant driver class org.h2.Dr
iver (version 1.3)
22:39:51,026 INFO  [org.jboss.as.security] (MSC service thread 1-2) JBAS013100:
Current PicketBox version=4.0.7.Final
22:39:51,385 INFO  [org.jboss.ws.common.management.AbstractServerConfig] (MSC se
rvice thread 1-8) JBoss Web Services - Stack CXF Server 4.0.2.GA
22:39:52,135 INFO  [org.apache.coyote.http11.Http11Protocol] (MSC service thread
 1-4) Starting Coyote HTTP/1.1 on http--0_0_0_0_0_0_0_0-8080
22:39:52,526 INFO  [org.jboss.as.remoting] (MSC service thread 1-1) JBAS017100:
Listening on /0:0:0:0:0:0:0:0:4447
22:39:52,526 INFO  [org.jboss.as.remoting] (MSC service thread 1-5) JBAS017100:
Listening on /0:0:0:0:0:0:0:0:9999
22:39:52,526 INFO  [org.jboss.as.server.deployment.scanner] (MSC service thread
1-8) JBAS015012: Started FileSystemDeploymentService for directory K:\jboss-as-7
.1.1.Final\standalone\deployments
22:39:52,838 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service
thread 1-8) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]
22:39:53,073 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin con
sole listening on http://[0:0:0:0:0:0:0:0]:9990
22:39:53,073 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss AS
7.1.1.Final "Brontes" started in 6079ms - Started 133 of 209 services (75 servic
es are passive or on-demand)

p.s. 如有错误还恳请大神们批评指正,非常感谢!

时间: 2024-10-20 18:58:49

JBoss7配置之支持IPv4和IPv6双栈环境的相关文章

约吗,IPv6/IPv4双栈命中注定需要发生的事

导读:曾经发过一条朋友圈:说说那个让你奋不顾身的人的故事吧.收到了很多留言,其中有一个男孩的留言让我印象很深刻.他说,刚见到她第一眼的时候,就喜欢上了.她给我的感觉,和其他人真的不一样.我不敢轻举妄动,怕她觉得这样我太肤浅,但不知道为什么,说不上她哪里好,但就是谁都替代不了. 虽然今天讲的这个事情(IPv6/IPv4双栈),没有那么美好的意境,但不约有些人是会后悔的. 2016年5月5日消息,苹果向开发者发出提醒,App Store将于今年6月1日实施全新策略,届时所有提交至苹果App Stor

第11章 拾遗4:IPv6和IPv4共存技术(1)_双栈技术和6to4隧道技术

6. IPv6和IPv4共存技术 6.1 双栈技术 (1)双协议主机的协议结构 (2)双协议栈示意图 ①双协议主机在通信时首先通过支持双协议的DNS服务器查询与目的主机名对应的IP地址. ②再根据指定的IPv6或IPv4地址开始通信. ③Win2008或2003默认就是双协议栈,Win2008的DNS同是支持IPv4和IPv6的名称解析. 6.2 6to4隧道技术 (1)6to4隧道示意图 ①隧道技术使得各个IPv6的信息"孤岛"能通过IPv4网络进行通信.它要求隧道两端的节点(路由器

IPv6技术系列⑨——IPv6、IPv4双栈实验

一.技术简介 双协议栈是指在单个节点同时支持IPv4和IPv6两种协议栈.由于IPv6和IPv4是功能相近的网络层协议, 两者都基于相同的物理平台, 而且加载于其上的传输层协议TCP和UDP也基本没有区别, 因此, 支持双协议栈的节点既能与支持IPv4协议的节点通信, 又能与支持IPv6协议的节点通信.而此种技术,也作为IPv4向IPv6过渡的技术之一广泛存在于现网之中. 二.实验拓扑 三.实验步骤 1.按照图中网络分配方法分别设置路由器Router0.Router1.Router2中各接口的I

IPv6相比IPv4在那些方面做出了改进?IPv4 to IPv6过渡的三种tunnel技术各自的特性

改进 地址空间的扩容,地址容量为2^128(或(43亿)^4) 配置更加简单,支持非DHCP自动配置地址: 层次化网络结构,每个地区使用相同前缀的地址范围,更加容易管理: 报头格式简单灵活,去除了IPV4报文中的一些报文格式,如IHL,Identifier.Flag-只增加了流标记.报文处理速度更快.并且扩展头是IPV6支持更好的扩展,灵活性更高 安全性更高,本身支持IPSec认证和加密 QOS支持更好,新增流标记域,提供QOS保障 过渡技术的特性 IPv4/IPv6双协议栈:网络中的节点同时支

Unix网络编程学习笔记之第12章 IPv4与IPv6的互操作性

一. 简介 假设我们本章讨论的主机都是支持双栈的,即支持IPv4地址,也支持Ipv6地址. 我们本次讨论的点:客户端与服务器端使用的是不同类型的地址.因为相同类型的地址没什么可讲的. 二. IPv4客户端与IPv6服务器 即,客户端使用IPv4地址套接字来通信,服务器端使用IPv6地址套接字通信. 原理: 0. 首先IPv6服务器主机保证既有IPv4地址,又有IPv6地址. 1. IPv4客户端通过getaddrinfo函数,找到服务器端的IPv4地址,然后进行连接. 2. 来自客户端的IPv4

《网络编程》IPv4 与 IPv6 相互操作

前言 由于互联网终端不断增加,IPv4 地址长度(32位)已不能够满足要求,所以出现了 IPv6地址(128位),但是现有应用程序大部分还是采用 IPv4 地址形式,所以必须解决 IPv4 与 IPv6 之间的相互操作,使现有基于 IPv4 的应用程序能够与基于 IPv6 的应用程序相互通信.那么我们怎么实现 IPv4 客户端与 IPv6 服务器.IPv6 客户端与 IPv4 服务器之间的通信. IPv4 客户端与 IPv6 服务器 假设我们主机是运行双栈,即存在 IPv4 协议栈和 IPv6

ISIS协议的IPv4和IPv6的标准

拓扑图拓扑图 ?实验目的: 测试该拓扑中运行ISIS协议下同时开启IPV4和IPV6,在中间路由器IPV6不连续的情况下,两端的路由器能获得对方的ipv6路由,但是无法ping通. 实验要求: 1.各路由器对应链路上的地址按:ipv4为XY.1.1.X/Y--/24,换回口地址按:X.X.X.X/32 ipv6为:2001:XY::X/Y--/64,换回口地址按:2012::X/128 2.在R1到R4路由器上配置IPV4的ISIS进程并在所有相关接口开启ISIS协议 3.在R1和R2,R3和R

IPv6/IPv4双栈的MPLS VPN——6VPE实战部署(华为和思科大融合)

个人理解,6VPE(IPv6VPN Provider Edge)是承载IPv6的MPLSVPN,是在保持原有MPLS BGPv4骨干不做大变动的情况下,一种IPv6 MPLS VPN过渡技术.基本部署步骤如下:PE与CE之间存在IPv6 VRF,建立BGPv6的邻居关系:PE与RR之间可以建立IPv6的BGP邻居关系,也可以建立IPv4邻居关系,同步复制VPNv4地址族到VPNv6地址族中,其他配置跟IPv4的MPLS VPN没有什么大区别. 以下为实验室测试环境下部署6VPE案例实战分析: 环

男人 就该将自己活成IPV4绝非IPV6(三)

一个陌生的女人 坐在我的对面默念着一封长信 和一张老人的照片 我不想去了解 她的故事也许比我更遗憾 也许没有我的遗憾 就好像你在遥远的地方 我在回家的路上昨天还梦见我为你歌唱唱着动人的歌谣 好像生来就忧伤可睁开眼你就安静的 睡在我身旁 我曾经不知疲倦 描绘着每个未来直到他们都变成 真实的现在 我却想回到那一天 我遇见你的瞬间没有烦心的梦 没有琐碎的一切 一个多年的兄弟 流着眼泪端着酒杯问我他说 你觉得我除了音乐和爱情 还能想些什么呢我看着她的脸 就像看着一面镜子我对他说 瞧你丫那操行吧 就好像她