パスワードを忘れた? アカウント作成
569375 journal

Ab.の日記: IP Messenger に FreeBSD NAT で引きこもる

日記 by Ab.
社内LAN側が 192.168.0.0/16、自分用引きこもりLANが 172.16.0.0/24、router は FreeBSD 5.4 で 192.168.0.253, 172.16.0.254。root を持ってます。
引きこもり LAN 内の IPMessenger の broadcast addr を 172.16.0.254 に設定しておきます。引きこもり LAN 内には自分のマシンしかありません。

*まず、 router で動かす daemon? script がコレ。

use strict;
use FileHandle;
use IO::Socket::INET;
use Encode;

STDOUT->autoflush(1);
STDERR->autoflush(1);

print "ipmsg relayer.pl started.\n";

my $sock_broadcast = IO::Socket::INET->new(PeerPort  => 2425,
                                           PeerAddr  => '192.168.255.255',
                                           Proto     => 'udp',
                                           LocalAddr => '192.168.0.253',
                                           LocalPort => 2425,
                                           Broadcast => 1,
                                           )
    or die "Can't bind : $@\n";

my $sock_listen = IO::Socket::INET->new(Proto           => 'udp',
                                        LocalAddr       => '172.16.0.254',
                                        LocalPort       => 2425,
                                        )
    or die "Can't listen : $@\n";

my $cnt = 0;
while (1) {
    my $buf;
    $sock_listen->recv($buf, 64*1024);
    $cnt ++;
    print $sock_broadcast $buf;

    $buf =~ s/\000/_0_/g;
    Encode::from_to($buf, "shift_jis", "euc-jp");
    print "$buf\n";
}

* あとは、pf で引きこもりLANから社内LANに飛んでゆく 2425/udp へのパケットを nat します。このとき static-port って書いてやって、src port を 2425 のままにしておいてやります。

* 最後に、pf で 192.168.0.253 2425/udp を IP Messenger を動かしてるマシンに rdr してやれば出来上がり。

pf に 192.168.255.255 や 255.255.255.255 を rdr するルールも書いたけど、どうやらリダイレクトしてくれないようなので、自分で「更新」ボタンをたたかないとメンバー表は更新されません。
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

日本発のオープンソースソフトウェアは42件 -- ある官僚

読み込み中...