携帯にxperia acroを使ってるんですが、自宅PC(NASとか)へのアクセスのために、pptpを使って
vpn接続した場合、十数分ぐらいで切断されてしまいます。
どうも、androidにpptpバグがあるっぽいandroid 2.3.7だと直ったようですが手元のxperia acroは、2.3.3・・・。次に携帯買うときはspモードかもしれないし、その場合pptpサポートされませんし・・・。ので、pptpの代わりにL2TP/IPsecを使うことにしました。
1万以下で買えるルータでL2TP/IPsec使えるものがなさそうなので、
余っていた昔のノートPC(Let’s note T2)にソフトウェアルータ(vyatta)をインストールして、
ネットワーク組みました。記録のため、ここに書いときます。
vyattaのネットワーク構成
- eth2からpppoeでプロバイダに接続
- eth0から自宅内LANに接続
- zoneをinside, local-zone(=vyatta), outsideに分けてfirewall設定
- outside -> local-zoneの通信は、ssh, L2TP/IPsecのみ許可
- DDNS更新サービスを起動することで、グローバルIPが変わっても同一ドメイン名でoutsideからアクセスできるようにする(事前にDynDNSにドメイン作った)
- DNSは、Google Public DNS(8.8.8.8, 8.8.4.4)
ネットワークを図にすると以下の通りです。
xperia acroから、グローバルIP(私はapnにmopera使ってます)でL2TP/IPsec vpn接続&通信はできました。とりあえず動いたから満足した。
vyattaの設定として、nat-traversal有効(かつ、udp 4500開放)にしてあるので、たぶんspモード(ローカルIP付与されたxperia acro)でもつながるでしょう。
設定内容は以下の通り。MACとか見せたくないので、[dummy]に編集してあります。
$ show configuration firewall { all-ping enable name inside_to_vyatta { default-action drop rule 1 { action accept protocol all } } name outside_to_vyatta { default-action drop rule 1 { action accept protocol all state { established enable related enable } } rule 20 { action accept destination { port ssh } protocol tcp state { new enable } } rule 30 { action accept destination { port 500 } protocol udp state { new enable } } rule 40 { action accept destination { port 4500 } protocol udp state { new enable } } rule 50 { action accept destination { port 1701 } ipsec { match-ipsec } protocol udp state { new enable } } rule 60 { action accept protocol esp state { new enable } } } name to_inside { default-action drop rule 1 { action accept protocol all state { established enable related enable } } } name to_outside { default-action drop rule 1 { action accept protocol all } } name vyatta_to_inside { default-action drop rule 1 { action accept protocol all } } } interfaces { ethernet eth0 { address 192.168.1.1/24 description INSIDE duplex auto hw-id [dummy] smp_affinity auto speed auto } ethernet eth1 { duplex auto hw-id [dummy] smp_affinity auto speed auto } ethernet eth2 { description OUTSIDE duplex auto hw-id [dummy] pppoe 0 { default-route auto mtu 1492 name-server auto password **************** user-id [dummy] } smp_affinity auto speed auto } loopback lo { } } service { dns { dynamic { interface pppoe0 { service dyndns { host-name [dummy] login [dummy] password **************** } } } forwarding { cache-size 150 listen-on eth0 system } } nat { rule 1 { outbound-interface pppoe0 type masquerade } } ssh { disable-password-authentication port 22 protocol-version v2 } } system { config-management { commit-revisions 20 } console { } host-name vyatta login { user ssh-forward { authentication { encrypted-password **************** plaintext-password **************** public-keys [dummy] { key **************** type ssh-dss } } level operator } user vyatta { authentication { encrypted-password **************** public-keys [dummy] { key **************** type ssh-dss } } level admin } } name-server 8.8.8.8 name-server 8.8.4.4 ntp { server 0.vyatta.pool.ntp.org { } server 1.vyatta.pool.ntp.org { } server 2.vyatta.pool.ntp.org { } } package { auto-sync 1 repository community { components main distribution stable password **************** url http://packages.vyatta.com/vyatta username "" } } syslog { global { facility all { level notice } facility protocols { level debug } } } time-zone GMT } vpn { ipsec { esp-group ESP-GW { compression disable lifetime 3600 mode tunnel pfs enable proposal 1 { encryption 3des hash sha1 } proposal 2 { encryption aes128 hash sha1 } } ike-group IKE-GW { lifetime 28800 proposal 1 { dh-group 2 encryption 3des hash sha1 } proposal 2 { dh-group 2 encryption aes128 hash sha1 } } ipsec-interfaces { interface pppoe0 } logging { log-modes all } nat-networks { allowed-network 0.0.0.0/0 { exclude 192.168.1.0/24 } } nat-traversal enable site-to-site { } } l2tp { remote-access { authentication { local-users { username [dummy] { password **************** } } mode local } client-ip-pool { start 192.168.1.90 stop 192.168.1.99 } dns-servers { server-1 8.8.8.8 } ipsec-settings { authentication { mode pre-shared-secret pre-shared-secret **************** } ike-lifetime 3600 } mtu 1280 outside-address [dummy] outside-nexthop [dummy] } } } zone-policy { zone inside { from outside { firewall { name to_inside } } from vyatta { firewall { name vyatta_to_inside } } interface eth0 interface l2tp+ } zone outside { from inside { firewall { name to_outside } } from vyatta { firewall { name to_outside } } interface eth2 interface pppoe0 } zone vyatta { from inside { firewall { name inside_to_vyatta } } from outside { firewall { name outside_to_vyatta } } local-zone } }