はじめに
初めての記事です。指摘点が多いかもしれませんが大目に見てください・・・
何がしたいのか
アパートに住んでいるのですが、アパートなど集合住宅のLANでは、グローバルIPがない上に外からのパケットはほぼ内側には届きません。
マイクラなど、IPで接続するゲームや、自室のLAN内に存在するPCをWOLでブートしたり、ファイル共有をしたりしたいと思ったので、Linuxやネットワークの勉強も兼ねてVPSをレンタルしてグローバルIPをゲットすることにしました。
なぜRTX1200を使ったのか
マイクラサーバーをVPNで利用するだけなら簡単です。しかし、WOLを利用するためには、常時VPNにログインしている端末から、マジックパケットを流す必要があります。
常時電源が入っていて、VPNクライアントとして動作できるものとしてRaspberryPiがありますが、応答速度やSDカードの信頼性の問題から使用は避けたいなと思ったのでRTX1200を利用することにしました。(というのは建前で、RTX1200を使ってみたかった。笑)
具体的にどうするか
さくらVPS上にSoftetherVPNをインストールしてVPNサーバーを立てます。そして、L2TPv3/IPsecを利用して、VPNサーバー上の仮想HUBとRTX1200のLAN1をカスケード接続します。
するとLAN1に接続されたホストは、VPNの仮想HUBと同じセグメントに存在するようになります。
こうすれば、L2TP/IPsecで同じようにVPNにログインしたスマホからマジックパケットをPCに送信することができ、インターネット側からVPSに対してのパケットもPCに届きます。(iptableの設定が必要です。)
また、今回の目的では、VPNの主な目的である「暗号化によるセキュアな通信」は必要ないので、内から外への通信(httpなど)は原則として自室LANに流すことにします。
実際にやったこと
さくらVPSにVPNサーバーを建てる
Softetherのインストール
割愛します。こちらなどを参考にインストールしてください。
ポイントとして、さくらVPSではデフォルトでパケットフィルタがありますので、コントロールパネルから利用しないように設定するか、UDP500、1701、4500ポートを開放してください。また、OS側でもファイアウォールがありますので、後述する方法でポート開放してください。
VPNの設定
WindowsのVPNサーバー管理ソフトウェアでVPNサーバーの設定を行います。前述の通り今回は、VPNからトラフィックを流したいわけではないので、Softetherの記事の多くに見られる設定から変えます。ポイントとなる部分に重点を置いて説明していきます。
1.ローカルブリッジの設定
今回は、インターネットに接続されているeth0とブリッジさせるのではなく、新しいTAPデバイスにブリッジさせます。ラジオボタンを変更して新しいタップでデバイスを作成し、ブリッジさせます。(以後、このTAPをtap1とします。)
2.IPsec/L2TP設定
L2TPサーバー機能とEther/L2TPv3 over IPsecサーバー機能にチェックを入れ、IPsec事前共有鍵を変更します。さらにサーバ機能の詳細設定に進みます。
任意のISAKMP Phase 1 IDと接続先の仮想HUBとそれにあらかじめ登録しておいたユーザー名とパスワードを入力します。
これでGUIからの設定は完了です。
VPSのshellからの設定
1.TAPデバイスへのIPアドレス付加
はじめに、前項で作成したtapにIPアドレスを振ります。IPアドレスは、192.168.100.2/24を振ります。tapの名前は、tap_tap1となっているはずです。適宜ifconfigなどで確認しましょう。
sudo ip addr add 192.168.100.2/24 dev tap_tap1
きちんとIPが振られているかifconfigで確認しましょう。
2.ファイアウォールの設定
firewalldを使って、前述のUDP500、1701及び4500ポートの開放と、WOL、マイクラのデフォルトポートである、UDP9及びTCP25565ポートのポートフォワーディング設定を行います。フォワード先のIPは192.168.100.127とします。
sudo firewall-cmd --zone=external --change-interface=eth0 --permanent
sudo firewall-cmd --zone=internal --change-interface=tap_tap1 --permanent
sudo firewall-cmd --zone=external --add-port=500/udp --permanent
sudo firewall-cmd --zone=external --add-port=4500/udp --permanent
sudo firewall-cmd --zone=external --add-port=1701/udp --permanent
sudo firewall-cmd --zone=external --add-forward-port=port=9:proto=udp:toport=9:toaddr=192.168.100.127 --permanent
sudo firewall-cmd --zone=external --add-forward-port=port=25565:proto=tcp:toport=25565:toaddr=192.168.100.127 --permanent
sudo firewall-cmd --zone=internal --add-masquerade --permanent
sudo firewall-cmd --zone=external --remove-masquerade --permanent
sudo firewall-cmd --reload
戻り値は省いていますが、successなどと表示されるはずです。これでコンソールからの設定は終了です。
RTX1200の設定
RTX1200のコンフィグファイル
今回の実装でのコンフィグファイルはこんな感じ。SoftetherのサイトにRTXシリーズ用の設定例がありますのでそれを参考にしました。
前半で書いたように、内から外の通信自体はVPNサーバーを経由させずにルーターから直接出すので、LAN2にIPマスカレード設定をしたり、ブリッジにIPアドレスを振っています。その他にも、ntpによる時刻合わせ設定や、LAN3から通常のアクセスができるようにDHCPとIPアドレス設定もしています。
login password
administrator password
ip route default gateway dhcp lan2
bridge member bridge1 lan1 tunnel1
ip bridge1 address 192.168.100.1/24
ip lan2 address dhcp
ip lan2 nat descriptor 1
ip lan3 address 192.168.200.1/24
tunnel select 1
tunnel encapsulation l2tpv3
tunnel endpoint address (さくらVPSのグローバルip)
ipsec tunnel 101
ipsec sa policy 101 1 esp aes-cbc sha-hmac
ipsec ike duration ipsec-sa 1 691200 rekey 90%
ipsec ike duration isakmp-sa 1 691200 rekey 90%
ipsec ike keepalive log 1 on
ipsec ike keepalive use 1 on dpd 10 6 0
ipsec ike local name 1 (前項で設定したISAKMP Phase 1 ID) fqdn
ipsec ike nat-traversal 1 on keepalive=30 force=off
ipsec ike pre-shared-key 1 text (前項で設定した事前共有鍵)
ipsec ike remote address 1 (さくらVPSのグローバルip)
ipsec ike restrict-dangling-sa 1 off
l2tp always-on on
l2tp tunnel disconnect time off
l2tp keepalive use on 5 10
l2tp keepalive log on
l2tp syslog on
l2tp remote end-id vpn
tunnel enable 1
nat descriptor type 1 masquerade
nat descriptor address outer 1 primary
ipsec auto refresh on
ipsec transport 1 101 udp 1701
telnetd host lan
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.3-192.168.100.191/24
dhcp scope 2 192.168.200.2-192.168.200.191/24
dns server dhcp lan2
schedule at 1 */* 00:00:00 * ntpdate ntp.nict.jp syslog
l2tp service on l2tpv3
これをSDカードなどから内蔵ROMに書き込みます。
CUI(telnet)の操作
まずはじめに、telnetクライアントをインストールする必要があります。Windowsの機能の有効化または無効化から、telnet clientを有効化します。
コマンドプロンプトからtelnetを実行すると、こんな感じの画面になるので、
open 192.168.100.1
といれて、ルーターにtelnet接続をします。パスワードを聞かれますが、工場集荷状態では設定されていまあせんので、空欄でEnterを押すとノーマルユーザーとしてログインできます。コマンドを実行するには管理者としてログインが必要なので、
administrator
を実行します。パスワードを聞かれますので、同じように空欄でEnterを押します。これでコマンドで設定する準備ができました。
作ったコンフィグファイルをconfig.txtとしてSDカードのルートディレクトリに保存し、RTX1200本体に指します。ピポッと鳴ったら、
copy config sd1:/config.txt 0
を実行します。config.txtを内蔵ROMのconfig0に保存するという意味です。USBメモリのときは"sd1"を"usb1"に変えます。
これでLAN2を自宅LAN、LAN1にPCを繋げば、ネットもできて、外部からのWOLやグローバルIPを利用したゲームができるでしょう。
終わりに
いかがだったでしょうか。拙い文章でわかりにくい部分や、間違っている部分があったかもしれませんが、似たようなことをやろうとしている人の助けになれば幸いです。
おまけ
おまけというか使っていて気がついたことなのですが、上記の設定だと60Mbpsくらいで頭打ちになってしまうみたいです。ブリッジインターフェースを介して通信すると遅くなってしまうみたいなので、tunnel1をLAN3にブリッジさせて、LAN3からLAN1に物理的なEthernetケーブルを利用してブリッジさせるようにしました。VPNサーバーからのパケットも来るし、速度も戻ったので、少し気持ち悪いですがよしとしました。
本文のコンフィグの
bridge member bridge1 lan1 tunnel1
ip lan3 address 192.168.200.1/24
の行をそれぞれ
bridge member bridge1 lan3 tunnel1
ip lan1 address 192.168.100.1/24
に変えて、
ip bridge1 address 192.168.100.1/24
を消せばOKです。(たぶん)
追記:2022/02/26
いろいろ試してるうちに、同じブリッジインタフェースに収容したbridge1とLAN1に同じIPアドレスを振ると、速度が低下せずに通信できることに気が付きました。
こちらのYAMAHA公式サイトでは、ブリッジインタフェースに収容する実インタフェースにはIPアドレスを振ってはいけないと書いていますが、何故かうまく動きます。ちなみにIPアドレスはLAN1だけに振ると通信ができず、bridge1だけに振ると速度が低下します。多分バグに近い仕様だと思います。本文中のconfigに加えて
ip lan1 address 192.168.100.1/24
を加えると幸せになれます。