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
のように繋げるとかしないといけなくなってしまうのだろうか…?