opensim-0.8.1-nat-0.92-JOG.zip をテストしました。
テストした環境
1つのサーバー上に、ポートを分けてOpenSim-AとOpenSim-Bの2つ同時に立ち上げています。
OpenSim-A、OpenSim-Bは、マップ上で隣り合っています。
OS: FreeBSD 8.4-RELEASE-p26
Mono: 3.12.1
ルータ: Baffalo WHR-HP-G300N (NATループバック非対応)
OpenSim-A: mysim.example.jp (TCP:9020, UDP: 9020-9021, リージョン2つ)
opensim-0.8.1-nat-0.92-JOG.zip のバイナリに、
FreeBSD用のlibode, libopenjpegを追加したもの。
OpenSim-B: mysim.example.jp (TCP:9000, UDP: 9000, リージョン1つ)
http://www.osgrid.org/index.php/downloads からダウンロードしたOSGridの開発版 0.8.2-Dev
(OSgrid OpenSimulator 0.8.2.dev.83e58eb - [31.8mb] 03-17-2015) に、opensim_nat_0.8.1-0.92.patch を適用し、
FreeBSDでビルドしなおしたものに、FreeBSD用のlibode, libopenjpegを追加したもの。
(1) OpenSimサーバーと同一LAN内のビュアーからのアクセス
OpenSim-A・OpenSim-Bの両方とも、同一LAN内のビュアーからアクセスできました。
しかし、OpenSim-AからOpenSim-Bは見えませんしTeleport(以下TP)もできません。
またOpenSim-Bからも同様です。
(1-1) JOG Center SIM を経由したTP
OpenSim-A --> JOG Center SIM --> OpenSim-B
OpenSim-B --> JOG Center SIM --> OpenSim-A
というように、JOG Center SIMを経由すると、問題なくスムーズにTPできます。
(1-2) JOG Center SIM を経由しないTP
JOG Center SIMではなく、NAT対応していないと思われるSIMを経由しようとすると、TPできないことがあります。
OpenSim-A --> 他のSIM --> ダメ(×) OpenSim-A
OpenSim-A --> 他のSIM --> ダメ(×) OpenSim-B
OpenSim-B --> 他のSIM --> ダメ(×) OpenSim-A
OpenSim-B --> 他のSIM --> ダメ(×) OpenSim-B
(他のSIMには、Tomoyoさんのリージョンを利用させてもらいました....どうもありがとう)。
あと、この場合、OpenSim-Bに戻ると、服が一部ぬげてしまうことがあったり、そこからTPしようとしても、「テレポートに失敗しました。 Internal error」とビュアーに表示され、どこにも行けなくなることが(たまに)ありました。この時、OpenSimのコンソールには次のようなエラーがでています。
01:26:43 - [ENTITY TRANSFER MODULE]: Exception on teleport of Next Darwin from <128.0045, 127.9693, 25.93188>@Darwins_NAT_SIM to <128, 128, 28.97377>@JOG Center Sim: Object reference not set to an instance of an object at OpenSim.Region.Framework.Scenes.SceneObjectGroup.CopyRootPart (OpenSim.Region.Framework.Scenes.SceneObjectPart part, UUID cAgentID, UUID cGroupID, Boolean userExposed) [0x00009] in /usr/home/opensim/opensim/JOGrid/NAT/opensim-83e58eb_NAT/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs:1793
at OpenSim.Region.Framework.Scenes.SceneObjectGroup.Copy (Boolean userExposed) [0x0003e] in /usr/home/opensim/opensim/JOGrid/NAT/opensim-83e58eb_NAT/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs:1724
at OpenSim.Region.Framework.Scenes.SceneObjectGroup.CloneForNewScene () [0x00003] in /usr/home/opensim/opensim/JOGrid/NAT/opensim-83e58eb_NAT/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs:3893
at OpenSim.Region.CoreModules.Avatar.Attachments.AttachmentsModule.CopyAttachments (IScenePresence sp, OpenSim.Framework.AgentData ad) [0x00060] in /usr/home/opensim/opensim/JOGrid/NAT/opensim-83e58eb_NAT/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs:240
at OpenSim.Region.Framework.Scenes.ScenePresence.CopyTo (OpenSim.Framework.AgentData cAgent) [0x0027f] in /usr/home/opensim/opensim/JOGrid/NAT/opensim-83e58eb_NAT/OpenSim/Region/Framework/Scenes/ScenePresence.cs:3986
at OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.TransferAgent_V2 (OpenSim.Region.Framework.Scenes.ScenePresence sp, OpenSim.Framework.AgentCircuitData agentCircuit, OpenSim.Services.Interfaces.GridRegion reg, OpenSim.Services.Interfaces.GridRegion finalDestination, System.Net.IPEndPoint endPoint, UInt32 teleportFlags, UInt32 oldRegionX, UInt32 newRegionX, UInt32 oldRegionY, UInt32 newRegionY, System.String version, System.String& reason) [0x00323] in /usr/home/opensim/opensim/JOGrid/NAT/opensim-83e58eb_NAT/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs:1226
at OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.DoTeleportInternal (OpenSim.Region.Framework.Scenes.ScenePresence sp, OpenSim.Services.Interfaces.GridRegion reg, OpenSim.Services.Interfaces.GridRegion finalDestination, Vector3 position, Vector3 lookAt, UInt32 teleportFlags, IClientAPI client) [0x0050c] in /usr/home/opensim/opensim/JOGrid/NAT/opensim-83e58eb_NAT/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs:873
at OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.TeleportAgentToDifferentRegion (OpenSim.Region.Framework.Scenes.ScenePresence sp, UInt64 regionHandle, Vector3 position, Vector3 lookAt, UInt32 teleportFlags, OpenSim.Services.Interfaces.GridRegion& finalDestination, IClientAPI client) [0x0014e] in /usr/home/opensim/opensim/JOGrid/NAT/opensim-83e58eb_NAT/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs:592
at OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.Teleport (OpenSim.Region.Framework.Scenes.ScenePresence sp, UInt64 regionHandle, Vector3 position, Vector3 lookAt, UInt32 teleportFlags, IClientAPI client) [0x0010e] in /usr/home/opensim/opensim/JOGrid/NAT/opensim-83e58eb_NAT/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs:446
01:26:43 - [ENTITY TRANSFER STATE MACHINE]: Agent with ID b15da3f0-22b0-444f-a42f-e921d80cccd7 should not exit directly from state Transferring, should go to CleaningUp state first in Darwins_NAT_SIM
01:26:43 - [ENTITY TRANSFER STATE MACHINE]: Agent b15da3f0-22b0-444f-a42f-e921d80cccd7 cleared from transit in Darwins_NAT_SIM
いったん、こうなると、JOG Center SIM にもTPできなくなるので、ビュアーを再起動する必要があります。
(2) 外部ネットワークのビュアーからのアクセス
OpenSim-A・OpenSim-Bの両方とも、同一LAN内のビュアーからアクセスできました。
(1)と同様に、OpenSim-AからOpenSim-Bは見えないしTPもできません。逆も同様です。
(2-1) JOG Center SIM を経由したTP
OpenSim-A --> JOG Center SIM --> OpenSim-B
OpenSim-B --> JOG Center SIM --> OpenSim-A
というように、JOG Center SIMを経由すると、問題なくスムーズにTPできるのは(1)と同じです。
(2-2) JOG Center SIM を経由しないTP
これは、(2-1)と同様に、JOG Center SIMではなく、NAT対応していないと思われるSIMを経由していても、問題なくTPができています。
(3) その他
OpenSimを隣接して2つ立ち上げてるから、問題がおこるのかもしれません。
隣り合ったSIMどうしは、相互に通信してて、リージョンに配置されるオブジェクトやアバターの情報をやり取りしてますから...。
あと、NAT対応版OpenSimを、StandAloneHGモードで動作させるのは、まだやってません。また今度やってみます。
最終的には、NATループパック対応のBBR-4HGに戻すとは思いますが、もうちょっと、この状態で動かしてみます。