yoshida_eth0の日記 このページをアンテナに追加 RSSフィード

2012-05-30

VyattaにiPhone/iPadでPPTP接続が出来ない時の対処方

iPhone/iPadだと認証は通過して接続は成功してるけど、いざパケットのやり取りを始めるとVPNが途切れる。

Macからだと途切れないのに…。

という状態。

 

途切れた時のログは以下の通り。

May 30 18:57:48 vyatta pptpd[3395]: GRE: read(fd=7,buffer=80505a0,len=8260) from network failed: status = -1 error = Message too long
May 30 18:57:48 vyatta pptpd[3395]: CTRL: GRE read or PTY write failed (gre,pty)=(7,6)
May 30 18:57:48 vyatta pppd[3396]: Modem hangup
May 30 18:57:48 vyatta zebra[1205]: interface ppp0 index 16 changed <POINTOPOINT,NOARP,MULTICAST>.
May 30 18:57:48 vyatta pppd[3396]: MPPE disabled
May 30 18:57:48 vyatta pppd[3396]: Connection terminated: no multilink.
May 30 18:57:48 vyatta zebra[1205]: interface ppp0 index 16 deleted.
May 30 18:57:48 vyatta ripd[1217]: interface delete ppp0 index 16 flags 0x1090 metric 1 mtu 1496
May 30 18:57:48 vyatta ripngd[1225]: interface delete ppp0 index 16 flags 0x1090 metric 1 mtu 1496

 

どうやらMTUが大きすぎるのが原因らしい。

 

/etc/ppp/options.pptpd に以下追記。

mtu 1400

 

で、pptpdを再起動。

/etc/init.d/pptpd restart

 

運用中のルータだから試してないけど、Vyattaをリブートするとこの設定が消えるらしい。

どうしたものか。

 

参考URL

Vyatta と ipad2 で VPN 接続 - にーてぃんぐ なう

http://d.hatena.ne.jp/byoRF/20110724/1311522687

 

LinuxでVPNサーバー構築 PPTP暗号化

http://www.geocities.jp/sugachan1973/doc/funto27.html

2010-09-23

IPsec(L2TPD)でVPNサーバを立ててみた

IPsec(L2TPD)でVPNサーバを立ててみた。

OpenVPNで言う所の、ブリッジモード。

クライアントはサーバと同じネットワークに追加される。

 

必要なファイル全部記載。

詳しくは参考URLを。

サーバはCentOS

 

XL2TPD

インストール
yum -y install --enablerepo=epel xl2tpd

 

/etc/xl2tpd/xl2tpd.conf
[global]
auth file = /etc/ppp/chap-secrets

[lns default]
ip range = 192.168.0.240-192.168.0.254
local ip = 192.168.0.50
require chap = yes
refuse pap = yes
require authentication = yes
name = LinuxVPNserver
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

 

/etc/ppp/options.xl2tpd
ipcp-accept-local
ipcp-accept-remote
ms-dns  192.168.0.40
ms-wins 192.168.0.40
noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
logfile /var/log/xl2tpd.l2tp-ipsec.log

 

/etc/ppp/chap-secrets

同じユーザで同時接続出来た。

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
user1           *       "password1"             *
user2           *       "password2"             *

 

Openswan

インストール
yum -y install openswan

 

/etc/ipsec.conf
version 2.0

config setup
    protostack=netkey
    nat_traversal=yes
    #oe=off
    nhelpers=0

include /etc/ipsec.d/*.conf

 

/etc/ipsec.d/l2tp-psk.conf

rightsubnetを0.0.0.0/0にしないと繋がらなかった。

カンマでは指定出来ないらしく、接続先を絞り込みたい場合はconnを増やす必要があるらしい。

rightprotoportのポートにanyを指定しないと、1つのグローバルIPに対して1つしかトンネルを貼れない。

conn L2TP-PSK-NAT
    #rightsubnet=vhost:%priv
    #rightsubnet=192.168.0.0/24
    #rightsubnet=vhost:%no,%priv
    rightsubnet=0.0.0.0/0
    also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
    #
    # Configuration for one user with any type of IPsec/L2TP client
    # including the updated Windows 2000/XP (MS KB Q818043), but
    # excluding the non-updated Windows 2000/XP.
    #
    #
    # Use a Preshared Key. Disable Perfect Forward Secrecy.
    #
    # PreSharedSecret needs to be specified in /etc/ipsec.secrets as
    # YourIPAddress  %any: "sharedsecret"
    left=192.168.0.50
    #leftnexthop=192.168.0.1
    leftnexthop=%any
    authby=secret
    pfs=no
    auto=add
    keyingtries=3
    # we cannot rekey for %any, let client rekey
    rekey=no
    type=transport
    #
    #left=%defaultroute
    # or you can use: left=YourIPAddress
    #
    # For updated Windows 2000/XP clients,
    # to support old clients as well, use leftprotoport=17/%any
    leftprotoport=17/1701
    #
    # The remote user.
    #
    right=%any
    #rightprotoport=17/1701
    rightprotoport=17/%any

 

/etc/ipsec.d/no_oe.conf

CentOSのリポジトリのRPMにはこのファイルがついてなくて、探し回った。

# 'include' this file to disable Opportunistic Encryption.
# See /usr/share/doc/openswan/policygroups.html for details.
#
# RCSID $Id: no_oe.conf.in,v 1.2 2004/10/03 19:33:10 paul Exp $
conn block
    auto=ignore

conn private
    auto=ignore

conn private-or-clear
    auto=ignore

conn clear-or-private
    auto=ignore

conn clear
    auto=ignore

conn packetdefault
    auto=ignore

 

/etc/ipsec.secrets
include /etc/ipsec.d/*.secrets
: PSK "1234567890"

 

iptables

ベースはこれ。

 

ファイアウォール構築(iptables) - CentOSで自宅サーバー構築

http://centossrv.com/iptables.shtml

 

# FORWARD設定
iptables -A FORWARD -s $LOCALNET -j ACCEPT
iptables -A FORWARD -d $LOCALNET -j ACCEPT

# L2TP/IPSec
iptables -A INPUT -p tcp --dport 1701 -j ACCEPT_COUNTRY
iptables -A INPUT -p udp --dport 1701 -j ACCEPT_COUNTRY
iptables -A INPUT -p udp --dport 500 -j ACCEPT_COUNTRY
iptables -A INPUT -p tcp --dport 500 -j ACCEPT_COUNTRY
iptables -A INPUT -p tcp --dport 4500 -j ACCEPT_COUNTRY
iptables -A INPUT -p udp --dport 4500 -j ACCEPT_COUNTRY
iptables -A INPUT -p esp -j ACCEPT_COUNTRY

 

確認

これをしてFAILEDがあったら、その項目を解決してOKにする。

ipsec verify

 

これをして最後の方にconnの名前が表示されてなかったら、その設定で何かミスがある。

ipsec auto --status

 

参考URL

Memo - VPN Server for Fedora (L2TP/IPsec,PPTP)

http://www.ln-lab.net/lunar-night.lab/page2-memo_vpn/design-white/lang-ja

 

Kung Noi:OpenSwanでl2tp IPsec VPN環境

http://nai.homelinux.net/l2tp_ipsec.html

 

L2TPでVPN接続 | Kirie.net Blog

http://blog.kirie.net/linux/62.html

 

suz-lab - blog: OpenswanでIPsec(たぶん一番簡単な方法)

http://blog.suz-lab.com/2010/06/openswanipsec.html

2010-03-28

自宅クライアントLANから会社LANに繋いでみた

前回(OpenVPNで会社のLANと自宅のLANを繋いでみた - yoshida_eth0の日記)は会社LANから自宅DMZへの接続が出来るようにした。

今回は、自宅クライアント用LANから、会社LANへ接続出来るようにする。

デバイスはTUNからTAPに変更した。

 

ネットワーク構成

自宅クライアント用LANは全部DHCPでやってるから、変えても特に問題がないので変更した。

 

自宅のネットワークは↓この2つ。

・192.168.0.0/24 ←DMZ

・192.168.10.0/24 ←クライアント用

 

会社のネットワークは↓この1つ。

・192.168.1.0./24

 

自宅 VPNサーバ

/etc/openvpn/server.conf

client-config-dirを使って特定のクライアントには固定のIPを割り当てるようにした。

[root@vpn ~]# cat /etc/openvpn/server.conf | grep -v "^[#;]" | grep -v "^$"
port 1194
proto udp
dev tap
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh1024.pem
server 10.8.0.0 255.255.255.0
client-config-dir ccd
push "route 192.168.0.0 255.255.255.0"
push "dhcp-option DNS 192.168.0.40"
client-to-client
duplicate-cn
keepalive 10 120
tls-auth ta.key 0 # This file is secret
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
log-append  /var/log/openvpn.log
verb 3
management localhost 7505
crl-verify crl.pem

 

/etc/openvpn/ccd/kaisha
ifconfig-push 10.8.0.10 255.255.255.0

 

iptables

tunをtapに置き換え。

 

/etc/sysconfig/static-routes
any net 192.168.1.0/24 gw 10.8.0.10

 

社内サーバ(VPNクライアント)

/etc/openvpn/client.conf
[root@localhost ~]# cat /etc/openvpn/client.conf | grep -v '^[#;]' | grep -v '^$'
client
ifconfig 10.8.0.10 255.255.255.0
route 192.168.0.0 255.255.255.0 10.8.0.1
dhcp-option DNS 192.168.0.40
dev tap
proto udp
remote eth0.jp 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert kaisha.crt
key kaisha.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
verb 3

 

iptables

tunをtapに置き換え。

IPマスカレードしない。

#!/bin/bash

/etc/rc.d/init.d/iptables stop

iptables -P INPUT   ACCEPT
iptables -P OUTPUT  ACCEPT
iptables -P FORWARD ACCEPT

#iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

/etc/rc.d/init.d/iptables save
/etc/rc.d/init.d/iptables start

 

自宅ルータ

10.8.0.0/24と192.168.1.0/24は192.168.0.41に静的ルーティング。

 

自宅クライアントから会社LANにtracert

C:\>tracert 192.168.1.15

Tracing route to 192.168.1.15 over a maximum of 30 hops

  1     1 ms    <1 ms    <1 ms  corega.home [192.168.10.1]
  2     1 ms     1 ms     1 ms  192.168.0.1
  3     2 ms     5 ms     4 ms  192.168.0.41
  4    14 ms    12 ms    12 ms  10.8.0.10
  5    14 ms    13 ms    12 ms  192.168.1.15

Trace complete.

2010-03-25

OpenVPNで会社のLANと自宅のLANを繋いでみた

会社のLANと自宅のLANをOpenVPNを使って繋いでみた。

こんな感じ。

192.168.1.0/24(会社) <=> 10.8.0.0/24(VPN) <=> 192.168.0.0/24(自宅)

 

今回の登場人物は、

・インターネット上にポート開放された自宅のLinuxサーバ。

・社内のLANに引きこもってるLinuxサーバ。

・社内のLANに引きこもってるWindowsクライアント。

 

自宅のサーバと社内のサーバをVPN接続する。

社内のクライアントマシンは、社内サーバをゲートウェイに指定する。

パケットを受け取った社内サーバは、IPマスカレードして自宅サーバへ転送する。

社内クライアント(192.168.1.X) <=> (192.168.1.10)社内サーバ(10.8.0.X) <=> (10.8.0.1)自宅VPNサーバ(192.168.0.41) <=> (192.168.0.X)自宅サーバ群

 

久々にネットワーク図でも描いてみようかと思ったけどVisioが入ってないからやめた。

 

ここで書いてある事の全てのベースは、VPNサーバー構築(OpenVPN) - CentOSで自宅サーバー構築で書かれてるもの。

 

自宅 VPNサーバ

XenServerの仮想マシン。

メインサーバでiptablesの設定を弄りたくなかったから、VPN専用として新たに作成。

ルータで1194/udpへのアクセスはここに来るように設定。

静的ルーティングで10.8.0.0/24をこのマシン宛に。

 

OS

CentOS 5.4

 

OpenVPN

openvpn-2.0.9-1.el5.rf

 

ネットワーク

eth0 => 192.168.0.41

tun0 => 10.8.0.1

 

/etc/openvpn/server.conf
[root@vpn ~]# cat /etc/openvpn/server.conf | grep -v "^[#;]" | grep -v "^$"
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.0.0 255.255.255.0"
push "dhcp-option DNS 192.168.0.40"
client-to-client
duplicate-cn
keepalive 10 120
tls-auth ta.key 0 # This file is secret
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
log-append  /var/log/openvpn.log
verb 3
management localhost 7505
crl-verify crl.pem

 

iptables

ベースはファイアウォール構築(iptables) - CentOSで自宅サーバー構築を使う。

iptables -A INPUT -p tcp --dport 22 -j ACCEPT_COUNTRY
iptables -A INPUT -p udp --dport 1194 -j ACCEPT_COUNTRY

 

/etc/openvpn/openvpn-startup
#!/bin/bash

# VPNインタフェースiptablesルール削除スクリプト実行※必須
/etc/openvpn/openvpn-shutdown

# VPNサーバーからの送信を許可※必須
iptables -I OUTPUT -o tun+ -j ACCEPT
iptables -I FORWARD -o tun+ -j ACCEPT

# VPNクライアントからVPNサーバーへのアクセスを許可する場合
iptables -I INPUT -i tun+ -j ACCEPT

# VPNクライアントからLANへのアクセスを許可する場合
iptables -I FORWARD -i tun+ -d 192.168.0.0/24 -j ACCEPT

 

/etc/openvpn/openvpn-shutdown

VPNサーバー構築(OpenVPN) - CentOSで自宅サーバー構築と一緒。

#!/bin/bash

# VPNインタフェース(tun+)用iptablesルール削除関数
delete() {
    rule_number=`iptables -L $target --line-numbers -n -v|grep tun.|awk '{print $1}'|sort -r`
    for num in $rule_number
    do
        iptables -D $target $num
    done
}

# VPNインタフェース(tun+)用iptables受信ルール削除
target='INPUT'
delete

# VPNインタフェース(tun+)用iptables転送ルール削除
target='FORWARD'
delete

# VPNインタフェース(tun+)用iptables送信ルール削除
target='OUTPUT'
delete

 

社内サーバ(VPNクライアント)

社内のLANに引きこもってるXenの仮想マシン。

自宅のVPNサーバに接続して、VPNと社内クライアント間を中継する。

eth0からtun0への転送は、IPマスカレードする。

自宅にも192.168.1.0/24のネットワークがあるから、静的にルーティングの設定が出来なかった。

 

OS

CentOS 5.4

 

OpenVPN

openvpn-2.0.9-1.el5.rf

 

ネットワーク

eth0 => 192.168.1.10

tun0 => 10.8.0.X (DHCP)

 

/etc/openvpn/client.conf
[root@new-host-7 ~]# cat /etc/openvpn/client.conf | grep -v '^[#;]' | grep -v '^$'
client
dev tun
proto udp
remote eth0.jp 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
verb 3

 

iptables

流石にこれはまずいかも知れないけど、公開してないからとりあえずいいって事にしとく。

NATが絡むと途端に解らなくなる。

今度調べる。

#!/bin/bash

/etc/rc.d/init.d/iptables stop

iptables -P INPUT   ACCEPT
iptables -P OUTPUT  ACCEPT
iptables -P FORWARD ACCEPT

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

/etc/rc.d/init.d/iptables save
/etc/rc.d/init.d/iptables start

 

社内クライアント(Windowsマシン)

普通のWindowsマシン。(別にWindowsじゃなくてもいい)

使うものはcmd.exeだけ。

192.168.0.0/24へのゲートウェイを設定するだけ。

 

OS

Windows XP

 

ネットワーク

192.168.1.X (DHCP)

 

route設定
route add 192.168.0.0 mask 255.255.255.0 192.168.1.10 metric 1

 

会社のWindowsマシンから自宅のゲートウェイにtracert

届いた!

192.168.0.0/24のサーバ群には10.8.0.Xから来たように見えてる。

C:\>tracert 192.168.0.1

Tracing route to 192.168.0.1 over a maximum of 30 hops

  1    <1 ms    <1 ms    <1 ms  192.168.1.10
  2    12 ms    11 ms    12 ms  10.8.0.1
  3    16 ms    12 ms    12 ms  192.168.0.1

Trace complete.