tech.guitarrapc.cóm

C#, PowerShell, Unity, Cloud, Serverless Technical Update and Features

(RTX810構築シリーズ 1/7) Yamaha RTX810 で L2TP/IPsec を利用して リモートアクセス VPNを構築してみよう

Yamaha といえば、 ルータと楽器とバイクですね。個人的には、業務やお家で扱っていた経験から 大好きです。

さて、今回 某紫髪 のイケメンLync先生のお家とLAN間接続VPN を組むべく RTX810 を購入しました。

手始めに 固定IPを自宅にとったので、L2TP/IPSec環境を構築してみました。

今回は、初めて Yamaha ルータを触る人向けに設定例を紹介します。

固定IP で Yamaha RTXを使ってインターネット接続する

以前、愛用していたのが NetGenesis OPT シリーズ でした。このルータは、固定IPのNAT変換もGUIで提供しており、説明の必要がないのですが、RTXはちょっとだけコマンドで設定が必要です。

簡単ですので見てみましょう。

ネットワーク設定例:

今回は、 グローバルIP (固定IP) を1つという設定でやってみましょう。

固定グローバルIP : x.x.x.x
RTX810 LAN側IP : 192.168.100.254
プロバイダ名 : プロバイダ名 (ここは自分のわかりやすい名称でok)
接続 : 常時接続 (接続タイムアウトなし)

config例

ip route default gateway pp 1
 ip lan1 address (RTX810のLAN側アドレス/サブネット)

provider filter routing connection
 provider lan1 name LAN:
 provider lan2 name PPPoE/0/1/3/0/0:プロバイダ名

pp select 1
 pp name PRV/1/1/3/0/0:プロバイダ名
 pp keepalive interval 30 retry-interval=30 count=12 # キープアライブ間隔
 pppoe use lan2 # kab2を利用するので
 pppoe auto disconnect off # 常時接続
 pp auth accept pap chap # 認証方式
 pp auth myname (プロバイダユーザ名) (パスワード)
 ppp lcp mru on 1454 # 自動だとこの値 (Pingなどで算定したり)
 ppp ipcp ipaddress on
 ppp ipcp msext on # Windows用
 ppp ccp type none
 ip pp secure filter in 200003 # inbound の iptable filter (ここは例なので適当にしています。)
 ip pp secure filter out 200013 # outbound の iptable filter (ここは例なので適当にしています。)
 ip pp nat descriptor 1000 # 対応するnat descriptor 番号
 pp enable 1 # 有効にする

provider set 1 プロバイダ名
 provider dns server pp 1 1
 provider select 1

ip filter 200000 reject 10.0.0.0/8 * * * * # デフォルトのiptable filterはこんな感じ
ip filter 200001 reject 172.16.0.0/12 * * * *
ip filter 200002 reject 192.168.0.0/16 * * * *
ip filter 200003 reject 192.168.100.0/24 * * * * # ルータのLAN側IPに合わせて自動設定されます
# 他にも reject TCP 445 とかいわゆるお約束が続きます。

ip filter dynamic 200080 * * ftp #このあたりも自動で設定されたり
ip filter dynamic 200081 * * domain
ip filter dynamic 200082 * * www
ip filter dynamic 200083 * * smtp
ip filter dynamic 200084 * * pop3
ip filter dynamic 200098 * * tcp
ip filter dynamic 200099 * * udp

nat descriptor type 1000 masquerade # pp で紐づけた nat descriptor番号 1000 を指定してマスカレード
nat descriptor address outer 1000 x.x.x.x # nat descriptor番号 1000 で 外側固定IP x.x.x.x を指定

dhcp service server # dhcpサービス利用
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.110-192.168.100.120/24 # 100.110~10個利用

簡単ですねー。 ほぼGUIで設定できます。 その場合必要なのは、nat descriptor 設定だけです。

nat descriptor type 1000 masquerade # pp で紐づけた nat descriptor番号 1000 を指定してマスカレード
nat descriptor address outer 1000 x.x.x.x # nat descriptor番号 1000 で 外側固定IP x.x.x.x を指定

L2TP/IPsec で リモートアクセスVPNを構築する

ここまでできるなら、後は簡単です。

VPNとかだれでも簡単にできます。

一つの L2TPクライアント(アドレス不定)の接続を受け付ける

複数でも要領は変わらないのでさくっと行きましょう。

RTX810側ネットワーク設定例:

固定IP : x.x.x.x
RTX810 LAN側IP : 192.168.100.254
L2TPクライアントへのIP配布 : 192.168.100.99 (固定で1つ)
ipsec ike nat-traversal : プライベートIPを付与するため有効にする必要があります
L2TPトンネル認証 : なし
L2TPキープアライブ : 使用する インターバル10秒 ダウン検出までのカウント3回
L2TPキープアライブのログ出力 : 有り
L2TPトンネルの切断タイマ : タイマ切断しない
L2TPのコネクション制御に関するログ出力 : 有り

L2TPクライアント(iPhone)設定例:

IPアドレス : 不定 (3G接続)
IPsec事前共有鍵 : hogehoge
PPP認証ユーザー名 : fugafuga
PPP認証パスワード : piyopiyo

RTX810 のファームウェアに注意

必ず最新のファームウェアにアップデートしてください。記事時点では最新のRTX810 Rev.11.01.19が推奨。

購入時の初期版RTX810 Rev.11.01.04 では、たとえ設定が正しくても、L2TP接続時にinactivate ISAKMP socketと出て、接続が確率できません。

config例

インターネット接続に加えて必要な設定は以下です。 コマンド実行で簡単完了。

ip lan1 proxyarp on # route to rtx for outer to inner

pp select anonymous # Accept L2TP VPN
 pp bind tunnel1 # create 1 tunnel
 pp auth request pap chap # iPhone could use mschap-v2 and pap chap
 pp auth username fugafuga piyopiyo # username / pass for ppp
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ip pp remote address pool dhcp # assign from dhcp
 ip pp mtu 1258
 pp enable anonymous # anonymous connection

tunnel select 1 # configuration for tunnel 1
 tunnel encapsulation l2tp # declare l2tp vpn
 ipsec tunnel 1
 ipsec sa policy 1 1 esp aes-cbc sha-hmac # use esp as aes and sha-hmac (you cannot use sha256-hmac with iPhone)
 ipsec ike keepalive use 1 off
 ipsec ike local address 1 192.168.100.254 # Router address
 ipsec ike nat-traversal 1 on # required if assgin private address
 ipsec ike pre-shared-key 1 text hogehoge # password for l2tp
 ipsec ike remote address 1 any # accept any address
 l2tp tunnel disconnect time off # do not disconnect while connecting
 l2tp keepalive use on 10 3 # send keepalive packet while 10 second for 3 down detection
 l2tp keepalive log on
 l2tp syslog on
 ip tunnel tcp mss limit auto # limit for TCP session MSS
 tunnel enable 1

ip filter 200061 pass * 192.168.100.254 esp * *
ip filter 200062 pass * 192.168.100.254 udp * 500
ip filter 200063 pass * 192.168.100.254 udp * 4500
ip filter 200064 pass * 192.168.100.254 udp * 1701
ip pp secure filter in 200061 200062 200063 200064 # enable incoming connection

nat descriptor masquerade static 1000 1 192.168.100.254 esp
nat descriptor masquerade static 1000 2 192.168.100.254 udp 500
nat descriptor masquerade static 1000 3 192.168.100.254 udp 4500 
nat descriptor masquerade static 1000 4 192.168.100.254 udp 1701

ipsec transport 1 1 udp 1701 # ipsec transport mode for tunnel 1
ipsec auto refresh on

dns private address spoof on # return NX Domain for private address PRT record request, not to transfer to senior server

l2tp service on # enable l2tp service

もし L2TPクライアントが増える場合は、ppユーザーとtunnel と ipsec transport 設定をその分だけ追加するだけです。

pp auth username fugafuga2 piyopiyo2 # username / pass for ppp

tunnel select 2 # configuration for tunnel 2
 tunnel encapsulation l2tp # declare l2tp vpn
 ipsec tunnel 2
 ipsec sa policy 2 2 esp aes-cbc sha-hmac # use esp as aes and sha-hmac (you cannot use sha256-hmac with iPhone)
 ipsec ike keepalive use 2 off
 ipsec ike local address 2 192.168.100.254 # Router address
 ipsec ike nat-traversal 2 on # required if assgin private address
 ipsec ike pre-shared-key 2 text hogehoge # password for l2tp
 ipsec ike remote address 2 any # accept any address
 l2tp tunnel disconnect time off # do not disconnect while connecting
 l2tp keepalive use on 10 3 # send keepalive packet while 10 second for 3 down detection
 l2tp keepalive log on
 l2tp syslog on
 ip tunnel tcp mss limit auto # limit for TCP session MSS
 tunnel enable 2

ipsec transport 2 2 udp 1701 # ipsec transport mode for tunnel 1

ログの確認

ログを確認すると状況把握にいいでしょう。

# show log

2013/10/04 08:24:04: [IKE] respond ISAKMP phase to 接続先のグローバルIP
2013/10/04 08:24:08: [IKE] respond IPsec phase to 接続先のグローバルIP
2013/10/04 08:24:08: IP Tunnel[1] Up
2013/10/04 08:24:09: [L2TP] TUNNEL[1] connected from 接続先のグローバルIP
2013/10/04 08:24:09: [L2TP] TUNNEL[1] tunnel 13184 established
2013/10/04 08:24:09: [L2TP] TUNNEL[1] session 40428 established
2013/10/04 08:24:09: PP[ANONYMOUS01] Call detected from user 'ユーザー名'
2013/10/04 08:24:09: PP[ANONYMOUS01] PPP/IPV6CP up
2013/10/04 08:24:10: PP[ANONYMOUS01] PPP/IPCP up  (Local: RTX810のローカルIP, Remote: 接続先に与えたプライベートIP)
# 

失敗するとエラーが出ますが、設定中は、デバッグとInfo、Notice のログ段階全てを有効にしておくことを推奨します。

receive message from unknown gatewayと表示されて L2TP接続できない場合

接続テストで、L2TP接続を試みた際に、ログに "receive message from unknown gateway" と表示された場合は、以下のコマンドを実行すると解消します。

ipsec refresh sa

セッションの確認

あとは、セッションの確認だけです。

プロバイダとの接続状況

# show status pp 1
PP[01]:
説明: 
PPPoEセッションは接続されています
接続相手: hogehogefugafuga
通信時間: 1時間20分33秒
受信: 46028 パケット [35637253 オクテット]  負荷: 0.0%
送信: 10227 パケット [10318326 オクテット]  負荷: 0.0%
PPPオプション
    LCP Local: Magic-Number MRU, Remote: CHAP Magic-Number MRU
    IPCP Local: IP-Address Primary-DNS(x.x.z.z) Secondary-DNS(x.x.z.z),
 Remote: IP-Address
    PP IP Address Local: x.x.x.x, Remote: x.x.x.y
    CCP: None
# 

NATディスクリプタの状態を確認

# show nat descriptor address
参照NATディスクリプタ : 1000, 適用インタフェース : PP[01](1)
Masqueradeテーブル
    外側アドレス: x.x.x.x
    ポート範囲: 60000-64095, 54096-59999   75個使用中
プロトコル      内側アドレス                  宛先   マスカレード    種別
   UDP   192.168.100.254.1701            *.*.*.*.*         1701       static
   UDP   192.168.100.254.4500            *.*.*.*.*         4500       static
   UDP    192.168.100.254.500            *.*.*.*.*          500       static
   ESP      192.168.100.254.*            *.*.*.*.*            *       static
  -*-    -*-    -*-    -*-    -*-    -*-    -*-    -*-    -*-    -*-    -*-
      No.       内側アドレス      使用中のポート数    制限数         種別
       1       192.168.100.zz                   74     10000         dynamic
       2      192.168.100.254                    1     10000         dynamic
---------------------
有効なNATディスクリプタテーブルが1個ありました
# 

経路情報確認

# show ip route
宛先ネットワーク    ゲートウェイ     インタフェース  種別  付加情報
default             -                    PP[01]    static  
192.168.100.0/24     192.168.100.254     LAN1   implicit  
210.130.0.1/32      -                    PP[01] temporary  
210.130.1.1/32      -                    PP[01] temporary  
210.149.34.75/32    -                    PP[01] temporary  
# 

SA情報を確認

接続していないと見えませんが。

# show ipsec sa
Total: isakmp:1 send:1 recv:1

sa   sgw isakmp connection   dir  life[s] remote-id
-----------------------------------------------------------------------------
1     1    -    isakmp       -    3595    zzz.zzz.zz.zz(接続しているクライアントIP)
2     1    1    tra[001]esp  send 3596    zzz.zzz.zz.zz(接続しているクライアントIP)
3     1    1    tra[001]esp  recv 3596    zzz.zzz.zz.zz(接続しているクライアントIP)

# 

L2TPの接続状況

# show status pp anonymous
ANONYMOUS[01]:
L2TPセッションは接続されています
接続相手: 接続相手
通信時間: 1分29秒
受信: 66 パケット [4254 オクテット]
送信: 55 パケット [10368 オクテット]
PPPオプション
    LCP Local: CHAP Magic-Number MRU, Remote: Magic-Number
    IPCP Local: IP-Address, Remote: IP-Address Primary-DNS(x.x.x.x(RTX810のIP))
    PP IP Address Local: x.x.x.x(RTX810のIP), Remote: y.y.y.y(接続しているクライアントに与えたPrivateIP)
    IPV6CP Local: Interface-ID, Remote: Interface-ID
    PP Interface-ID Local: ccacccccccccac3, Remote: cc3ccccecccc0ccc
    CCP: None
受けとったUserId: 接続ユーザー名
# 

L2TPの状態

# show status l2tp
------------------- L2TP INFORMATION -------------------
Number of control table using
  Tunnel Control: 1, Session Control: 1
TUNNEL[1] Information
  Tunnel State: established
  Local  Tunnel ID: 13184
  Remote Tunnel ID: 38
  Local  IP Address: x.x.x.x(RTX810のIP)
  Remote IP Address: z.z.z.z(接続相手のグローバルIP)
  Local  Src Port: 1701
  Remote Src Port: 29688
  PP bind: ANONYMOUS[1]
  Vendor: 
  Hostname: 接続相手
  Tunnel has 1 session.
  Session Information
    Session State: established
    Local  Session ID: 40428
    Remote Session ID: 943
    Received: 95 packets [6246 octets]
    Transmitted: 61 packets [10681 octets]
# 

まとめ

後は、iPhoneでさくっと接続するだけ! 簡単YAMAHA最高ですね。 (設定に融通が効かない部分が一部ありますが、全然好き)

続きでは、 AWS VPCとの LAN間接続VPN と RTX810 同志の LAN間接続VPNでも載せましょうかしら。