携帯にxperia acroを使ってるんですが、自宅PC(NASとか)へのアクセスのために、pptpを使って
vpn接続した場合、十数分ぐらいで切断されてしまいます。

どうも、androidにpptpバグがあるっぽい1ので、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)

ネットワークを図にすると以下の通りです。
netfigure


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
    }
}
  1. android 2.3.7だと直ったようですが手元のxperia acroは、2.3.3・・・。次に携帯買うときはspモードかもしれないし、その場合pptpサポートされませんし・・・。 []