SSブログ

golangでルータ越えをIPv6で検討してみる [ソフトウェア]

前にGolangでUPnPを使ってルーター越えをしてみましたが、ルーター側の実装が怪しかったので現実的にやりにくいなと思っていました。結局、やられていないことは検証もされないという事で、新しいファームウェアにすればいいのかもしれないなと思いながら、今回はサンプルでコードを出すことにとどめました。できないことはないのですが、ルーターによってできたりできなかったりというのは作る方も使う方も面倒なので、実際に使っていくとしたらきついなと諦めました。

IPv4を使っているとどうしてもローカルアドレスと外部のグローバルアドレスの結び付けを考えないといけなくなって、ポートフォワーディングをせざるを得ないわけですが、IPv6を使っていればそんなこともないみたいな話を聞いたりしていたので、ちょっと調べてみることにしました。

https://internet.watch.impress.co.jp/docs/column/shimizu/1163817.html

IPv6では個別のコンピュータにもグローバルアドレスは与えられるようだ。実際Macでどうなっているのかifconfigで見てみると
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500                              
        ether f0:18:98:xx:xx:xx                                                                     
        inet6 fe80::4e9:c6e2:xxxx:xxxx%en0 prefixlen 64 secured scopeid 0x9                         
        inet6 240f:30:f470:1:14fb:xxxx:xxxx:xxxx prefixlen 64 autoconf secured                       
        inet6 240f:30:f470:1:f1f7:xxxx:xxxx:xxxx prefixlen 64 autoconf temporary                    
        inet 192.168.xxx.xxx netmask 0xffffff00 broadcast 192.168.xxx.xxx
        nd6 options=201 
        media: autoselect                                                                       
        status: active

と多くは伏せ字にはしたものの大体はわかってもらえると思う。サーバ目的にはautoconf securedという方を使うのかもしれない。というのもtemporaryって方は一時的に使うものだろうから、結果的にという話なんだけれども。ちなみにfe80で始まるのはたぶんローカルアドレスです、詳しく調べてないけど。

で、外部からこのアドレスに突き通せるかというと、外からいきなりじゃ無理っぽい。やっぱりルーターの設定が必要で、フィルタリングでアクセスを受け入れる設定をしないといけないみたいですね。それならUPnPでポートフォワーディングを設定するのと大して変わらないやんと思うのだけれど、まだ自動設定できる可能性のあるUPnPの方がいいという気もする。


それとブラウザでIPv6のアクセスをする場合、ローカルでも
http://[fe80::4e9:c6e2:xxxx:xxxx]/hello
みたいに[ ]で囲わないといけんみたいで面倒くさい。まぁ基本的にプロトコルが違うもんな。仕方ない。

https://www.ipentec.com/document/windows-internet-explorer-specified-ipv6-in-url

Windows Tipsって書いてあるけど、MacのFirefoxでも同様に使う事ができるみたい。


それとGolangでやろうとすると標準ライブラリというかパッケージにも組み入れられていないみたいで、まだ golang.org/x/net/ipv6 とまだ保留扱いのようである。そういう意味でも、まだ機は熟していない感じはある。
https://godoc.org/golang.org/x/net/ipv6
IoTとか言われているけども、いろいろ完全には揃っていない気はする。

何にしてもP2Pで容易に外からの通信を通すというのは難しいことみたい。確かに使わない人にとっては、アクセスを遮断してくれていた方が多分に安心できる状況ではあるから仕方ないのだけれど、もう少し自動化が望める状態になってほしいものである。でも、それをやると外部から踏み台にされるとか弊害もあるってことだよね。まぁそれは諸刃の剣っていうことなんだけど、自分で気にしてやれる分にはお気楽に設定できるようになればいいとは思う。

タグ:Golang
コメント(0) 
共通テーマ:パソコン・インターネット

Twitterまとめ投稿 2019/08/17 [Twitter]


コメント(0)