[ruby-list:50930] マシンをまたいだdRuby(Rinda)とIPv6

From: Masaki Haruka <yek@...>
Date: 2021-06-20 16:59:50 UTC
List: ruby-list #50930
正木です。
Rindaを用いて複数マシンに対して分散処理をしようとしたところ、うまくいかなかったので
アドバイスいただけたら幸いです。

問題のコードは次のようなものです。

require 'drb/drb'
require 'rinda/rinda'

SERVER_ADDRESS = "druby://hydrangea.local:40125"

DRb.start_service
ts = Rinda::TupleSpaceProxy.new(DRbObject.new(nil, SERVER_ADDRESS))

するとhydrangea自身以外では次のようになります。

(druby://hydrangea.local:40125) /usr/lib/ruby/3.0.0/drb/drb.rb:743:in
`rescue in block in open':
druby://fe80::245:e2ff:fe70:b1f5%wlp1s0:35865 - #<SocketError:
getaddrinfo: Name or service not known> (DRb::DRbConnError) from
(druby://hydrangea.local:40125) /usr/lib/ruby/3.0.0/drb/drb.rb:737:in
`block in open' from (druby://hydrangea.local:40125)
/usr/lib/ruby/3.0.0/drb/drb.rb:736:in `each'...

hydrangea.localは192.168.4.20です。

❯ getent hosts hydrangea.local
192.168.4.20    hydrangea.local

druby://hydrangea.local:40125に代えてdruby://192.168.4.20:40125としても同様です。

(druby://192.168.4.20:40125) /usr/lib/ruby/3.0.0/drb/drb.rb:743:in
`rescue in block in open':
druby://fe80::245:e2ff:fe70:b1f5%wlp1s0:41137 - #<SocketError:
getaddrinfo: Name or service not known> (DRb::DRbConnError) from
(druby://192.168.4.20:40125) /usr/lib/ruby/3.0.0/drb/drb.rb:737:in
`block in open' from (druby://192.168.4.20:40125)
/usr/lib/ruby/3.0.0/drb/drb.rb:736:in `each'...

リンクローカルアドレスが見えますが、おそらく疎通しません。
ネットワークセグメントとしては同一にありますが、ハブを3つ(ルーターのLANポートを含む)経由するためでしょうか…
ただ、この場合そもそもIPv6リンクローカルアドレスを用いて通信すること自体が意図したものではないので、
意図としては「IPv4で通信してほしい」になります。

インターフェイスからIPv6を排除するとうまくいくようではあります。

よろしくおねがいします。

In This Thread

Prev Next