NAT機能で動的にIPアドレスを書き換えるのはパケットヘッダーだけです。
しかし、SIPパケットのアプリケーション層にはIPアドレスが含まれており、NATはこれらのアドレスを変換しません。
最近のルーターにはSIPパケット内のアドレスを変換する機能があります。
私のルーターにもこの機能があり、パケットモニターを見る限り正常に変換が行われているのですが、ひかり電話モデム・ルーターのSIPサーバーは、同一ネットワーク内のクライアントにしか応答しないようになっているため、ルーター(NAT)経由でSIPサーバーに接続することを諦めました。
そこで、RaspberryPiにLANアダプタを追加接続し、ここから直接、ひかり電話モデム・ルーター内のSIPサーバーにアクセスします。
ハードウェアの導入
今ではイーサネットインターフェースはほとんどのPCに標準装備されていますが、かつてはLANアダプターを別途購入してPCに接続していました。
我家には、PCを買い替えて不要になったLANアダプターが眠っていたので、これを使用します。
PLANEX:GU-1000T
このLANアダプタの内部はAX88178というチップであり、デバイスドライバはOSにプリインストールされています。
したがって、usbに挿すだけで自動認識します。
確認:
$ lsusb
Bus 001 Device 004: ID 0b95:1780 ASIX Electronics Corp. AX88178
Bus 001 Device 003: ID 0424:ec00 Microchip Technology, Inc. (formerly SMSC) SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Microchip Technology, Inc. (formerly SMSC) SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
インターフェースの設定
ひかり電話モデム・ルーターのSIPサーバーと同じネットワーク(192.168.1.0/24)上でSIPサーバー(192.168.1.1)とは異なるアドレスを割り当てます。
例えば192.168.1.10などです。
ファイルパス:/etc/dhcpcd.conf
定義内容:
interface eth1192.168.1.10は割当てたアドレスに合わせてください。
static ip_address=192.168.1.10/24
static routers=192.168.1.1
確認:
$ ifconfig
eth0: flags=4163mtu 1500
inet 192.168.0.10 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 feb3::17e8:b07e:db46:c4b4 prefixlen 64 scopeid 0x20
ether b8:4f:4b:89:4f:7e txqueuelen 1000 (Ethernet)
RX packets 74873 bytes 7960358 (7.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 36719 bytes 6047777 (5.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4163mtu 1500
inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 7f80::b47f:4732:804f:4047 prefixlen 64 scopeid 0x20
inet6 2405:657f:40:7f00:a97f:b4a4:8e4a:898e prefixlen 64 scopeid 0x0
ether 00:f7:90:cc:b0:c0 txqueuelen 1000 (Ethernet)
RX packets 797 bytes 419185 (409.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1001 bytes 119610 (116.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 828 bytes 55622 (54.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 828 bytes 55622 (54.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0