Subscribed unsubscribe Subscribe Subscribe

tiarra+stoneを卒業してZNCを使い始めた

IRC Bouncers(IRC Proxy)あれこれ - すぎゃーんメモIRC Bouncerを調べたりしつつも結局tiarra(+SSL接続のためにstone併用)でやっていたけど、ようやくZNCに以降できたっぽいのでメモを書き残しておく。

ZNCの特徴
  • yumなどのpackage managerで簡単にインストールできる
  • 設定ファイルを対話的に作成できる
  • Web管理画面を使った設定確認/変更も可能
  • 様々なプラグイン機構(あんまり試してないけど)
  • SSL接続可能
  • 複数ネットワークに接続するためには複数ユーザを作る必要がある

最後のがちょっとネックではあるけれど、逆にその方が自然な気もするしそれで良いのかも知れない。

ZNCのインストール
$ sudo yum install znc
ZNCの初期設定

znc --makeconfで対話的に設定を行うことができる。例:

$ znc --makeconf
[ ** ] Building new config
[ ** ]
[ ** ] First let's start with some global settings...
[ ** ]
[ ?? ] What port would you like ZNC to listen on? (1 to 65535): 16667
[ ?? ] Would you like ZNC to listen using SSL? (yes/no) [no]:
[ ?? ] Would you like ZNC to listen using ipv6? (yes/no) [yes]:
[ ?? ] Listen Host (Blank for all ips):
[ ok ] Verifying the listener...
[ ** ]
[ ** ] -- Global Modules --
[ ** ]
[ ** ] +-----------+----------------------------------------------------------+
[ ** ] | Name      | Description                                              |
[ ** ] +-----------+----------------------------------------------------------+
[ ** ] | partyline | Internal channels and queries for users connected to znc |
[ ** ] | webadmin  | Web based administration module                          |
[ ** ] +-----------+----------------------------------------------------------+
[ ** ] And 6 other (uncommon) modules. You can enable those later.
[ ** ]
[ ?? ] Load global module <partyline>? (yes/no) [no]:
[ ?? ] Load global module <webadmin>? (yes/no) [no]:
[ ** ]
[ ** ] Now we need to set up a user...
[ ** ] ZNC needs one user per IRC network.
[ ** ]
[ ?? ] Username (AlphaNumeric): sugyan
[ ?? ] Enter Password:
[ ?? ] Confirm Password:
[ ?? ] Would you like this user to be an admin? (yes/no) [yes]:
[ ?? ] Nick [sugyan]:
[ ?? ] Alt Nick [sugyan_]:
[ ?? ] Ident [sugyan]:
[ ?? ] Real Name [Got ZNC?]:
[ ?? ] Bind Host (optional):
[ ?? ] Number of lines to buffer per channel [50]:
[ ?? ] Would you like to keep buffers after replay? (yes/no) [no]:
[ ?? ] Default channel modes [+stn]:
[ ** ]
[ ** ] -- User Modules --
[ ** ]
[ ** ]
[ ** ] +-------------+------------------------------------------------------------------------------------------------------------+
[ ** ] | Name        | Description                                                                                                |
[ ** ] +-------------+------------------------------------------------------------------------------------------------------------+
[ ** ] | admin       | Dynamic configuration of users/settings through IRC. Allows editing only yourself if you're not ZNC admin. |
[ ** ] | chansaver   | Keep config up-to-date when user joins/parts                                                               |
[ ** ] | keepnick    | Keep trying for your primary nick                                                                          |
[ ** ] | kickrejoin  | Autorejoin on kick                                                                                         |
[ ** ] | nickserv    | Auths you with NickServ                                                                                    |
[ ** ] | perform     | Keeps a list of commands to be executed when ZNC connects to IRC.                                          |
[ ** ] | simple_away | Auto away when last client disconnects                                                                     |
[ ** ] +-------------+------------------------------------------------------------------------------------------------------------+
[ ** ] And 23 other (uncommon) modules. You can enable those later.
[ ** ]
[ ?? ] Load module <admin>? (yes/no) [no]:
[ ?? ] Load module <chansaver>? (yes/no) [no]:
[ ?? ] Load module <keepnick>? (yes/no) [no]:
[ ?? ] Load module <kickrejoin>? (yes/no) [no]:
[ ?? ] Load module <nickserv>? (yes/no) [no]:
[ ?? ] Load module <perform>? (yes/no) [no]:
[ ?? ] Load module <simple_away>? (yes/no) [no]:
[ ** ]
[ ** ] -- IRC Servers --
[ ** ] Only add servers from the same IRC network.
[ ** ] If a server from the list can't be reached, another server will be used.
[ ** ]
[ ?? ] IRC server (host only): irc.freenode.net
[ ?? ] [irc.freenode.net] Port (1 to 65535) [6667]:
[ ?? ] [irc.freenode.net] Password (probably empty):
[ ?? ] Does this server use SSL? (yes/no) [no]:
[ ** ]
[ ?? ] Would you like to add another server for this IRC network? (yes/no) [no]:
[ ** ]
[ ** ] -- Channels --
[ ** ]
[ ?? ] Would you like to add a channel for ZNC to automatically join? (yes/no) [yes]:
[ ?? ] Channel name: #sugyan
[ ?? ] Would you like to add another channel? (yes/no) [no]:
[ ** ]
[ ?? ] Would you like to set up another user (e.g. for connecting to another network)? (yes/no) [no]:
[ ok ] Writing config [./znc/configs/znc.conf]...
[ ** ]
[ ** ] To connect to this ZNC you need to connect to it as your IRC server
[ ** ] using the port that you supplied.  You have to supply your login info
[ ** ] as the IRC server password like this: user:pass.
[ ** ]
[ ** ] Try something like this in your IRC client...
[ ** ] /server <znc_server_ip> 16667 sugyan:<pass>
[ ** ] And this in your browser...
[ ** ] http://<znc_server_ip>:16667/
[ ** ]
[ ?? ] Launch ZNC now? (yes/no) [yes]: no

こんなカンジで質問に答えながら設定していくと、~/.znc/configs/znc.confに以下のようなファイルが作られる。

// WARNING
//
// Do NOT edit this file while ZNC is running!
// Use webadmin or *admin instead.
//
// Buf if you feel risky, you might want to read help on /znc saveconfig and /znc rehash.
// Also check http://en.znc.in/wiki/Configuration

Listener   = 16667

<User sugyan>
        Pass       = sha256#8c862ac8b97df7f45a1d29b9fdf24aa361a4b55ef0c4c473c63cb50b53713717#?EV5YKo5CJa8;ZhaGosH#
        Admin      = true
        Nick       = sugyan
        AltNick    = sugyan_
        Ident      = sugyan
        RealName   = Got ZNC?
        Buffer     = 50
        KeepBuffer = false
        ChanModes  = +stn


        Server     = irc.freenode.net 6667 

        <Chan #sugyan>
        </Chan>
</User>

あとはコレでzncコマンドで立ち上げれば"Listener"で指定したポートで待ち受けつつ指定したサーバに繋いでくれる。
普通にIRCクライアントからコマンド打って設定を変えても良いし、webadminモジュールを使って立ち上げると そのポートにhttpでアクセスすることで管理画面を開くことができ、そこで設定することも可能。
webadmin - ZNC

複数ネットワークに繋ぐ

irc.freenode.netにもirc.perl.orgにも繋ぎたい、みたいなとき。それぞれ別ユーザを作る必要がある。別名のユーザを作り、それぞれの接続先で別サーバを指定しておけば良い。IRCクライアント側で各ユーザとして接続する。
weechatの場合、同一host & 同一port でもserverをそれぞれ別名で登録しておくことで区別できるので、

/server add freenode 127.0.0.1/16667 -password=<username1>:<password1>
/server add perl 127.0.0.1/16667 -password=<username2>:<password2>
/connect freenode
/connect perl

のようなコマンドで(接続先host/portは同じでも)それぞれ別々のネットワークに接続することができる。

SSL接続

znc --makeconfで"Does this server use SSL?"で訊かれたときに"yes"と答えればそれだけで良いのだけど。SSL接続を使う場合はport番号に"+"が付くらしい。設定ファイルでは

        Server     = irc.****.**** +6667 password****

のような形になる。これだけでSSL接続できるっぽい。簡単。

その他

デフォルトでバックグラウンドでのデーモン起動してくれるけど、"-f"オプションでforeground起動してくれるので、一応"-f -D"とデバッグ出力付きでdaemontoolsを使って動かしてみてる。
結局接続先ネットワーク分けることになったためにmobircで繋げる先も1つに限られてしまった…複数ネットワークに対してmobircから繋ぐためには結局

znc <- tiarra <- mobirc

のように繋げるとかしないといけなくなってしまうのだろうか…?