中国からFBやGoogle使うためのVPNサーバー


どこかからの願い

中国でもFacebookで"いいね"したいじゃないですか~(ほんとは違う理由だけど・・)

ということでVPN & Proxyサーバーを作ることにしました。
入れるのはxl2tpd,openswan,squidでございます。
とにかくさっさと作る必要があったので、簡単な方法でいきます。

ぷらっとふぉーむ

環境はAWSで
AMIはなぜかCentosだとうまくいかなかったので(多分自分の問題・・)AmazonLinuxで
amzn-ami-hvm-2015.03.0.x86_64-gp2

前準備

iptables 止める
SELINUX 止める

この辺を入れておく

yum install make gcc gmp-devel bison flex

sysctl.confにこの辺追記してsysctl -p

net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0

いったんリブート

yum

そう。yumですよ。yum。
epelリポジトリにて

yum install --enablerepo=epel openswan xl2tpd squid

はい、入ったね

chkconfig xl2tpd on
chkconfig ipsec on
chkconfig squid on

設定

ipsecの設定

confを以下のように編集
virtual_private=**は許可するアドレスレンジなので適宜変えてあげる

# cat /etc/ipsec.conf
version 2.0

config setup
    dumpdir=/var/run/pluto
    nat_traversal=yes
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
    protostack=netkey
include /etc/ipsec.d/*.conf

これはiOS用に必要な設定となる
dpddelay=10
dpdtimeout=20
dpdaction=clear

leftにはサーバーのPrivateIPアドレスを入れる
leftnexthopにはこのサーバーのデフォゲを入れる

# cat /etc/ipsec.d/l2tp-ipsec.conf
conn L2TP-PSK-NAT
    rightsubnet=vhost:%priv
    dpddelay=10
    dpdtimeout=20
    dpdaction=clear
    also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
        authby=secret
        pfs=no
        auto=add
        keyingtries=3
        ikelifetime=8h
        keylife=1h
        type=transport
        left=このサーバーのプライベートIP
        leftnexthop=デフォゲ
        leftprotoport=17/1701
        right=%any
        rightprotoport=17/%any

事前共有鍵の設定

例えばfoobar
実機はもっと複雑なのにしよう!

# cat /etc/ipsec.secrets
: PSK   "foobar"

xl2tpdの設定

ip rangeがVPN接続後にクライアントに振られるIPアドレスレンジ
local ipがVPN接続時のサーバー側のIPアドレス

# cat /etc/xl2tpd/xl2tpd.conf
[global]
auth file = /etc/ppp/chap-secrets
[lns default]
ip range = 192.168.1.128-192.168.1.254
local ip = 192.168.1.99
require chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

xl2tpdのオプション設定

optionでVPN接続名(例えばfoovpn)やVPN接続後のDNSやログファイルを指定する。
このファイルに書かなくてもいいけど、、とにかくファイルが散ってるなぁ
ログファイルはtouchしておく
touch /var/log/xl2tpd.log

[root@z-prd-vpnproxy01 squid]# cat /etc/ppp/options.xl2tpd
name foovpn
ipcp-accept-local
ipcp-accept-remote
ms-dns  8.8.8.8
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
logfile /var/log/xl2tpd.log

接続ユーザーは"foo"
接続VPN名は"foovpn"
パスワードは"bar"
接続元IPアドレスは限定せず*

# cat /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
"foo" "foovpn" "bar" *

squid

ほぼデフォ
変えたところはここだけ

# cat /etc/squid/squid.conf
#http_port 3128                                             
http_port 0.0.0.0:8080

セキュリティグループ

こちらを解放

500:udp
4500:udp
1701:udp

さあ起動

停止と起動

/etc/init.d/squid stop
/etc/init.d/xl2tpd stop
/etc/init.d/ipsec stop
/etc/init.d/squid start
/etc/init.d/xl2tpd start
/etc/init.d/ipsec start

確認

ipsec確認
以下コマンドでfailedとかあったら設定見直そう

# ipsec verify
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                                 [OK]
Linux Openswan U2.6.37/K3.14.35-28.38.amzn1.x86_64 (netkey)
Checking for IPsec support in kernel                            [OK]
 SAref kernel support                                           [N/A]
 NETKEY:  Testing XFRM related proc values                      [OK]
        [OK]
        [OK]
Checking that pluto is running                                  [OK]
 Pluto listening for IKE on udp 500                             [OK]
 Pluto listening for NAT-T on udp 4500                          [OK]
Checking for 'ip' command                                       [OK]
Checking /bin/sh is not /bin/dash                               [OK]
Checking for 'iptables' command                                 [OK]
Opportunistic Encryption Support                                [DISABLED]

接続

iPhoneから

iPhoneからは超絶簡単!

iphoneの設定 -> 一般 -> VPN -> "VPN構成を追加"を押す。

以下の画面になるので、必要な値を入力します。
説明にはVPN名:foovpn
サーバーには:VPNサーバーのグローバルIPアドレス
アカウント:foo
パスワード:bar

プロキシには"手動"を選んでください。
必要な情報を入れます。
サーバーにはVPN貼ったあとのIPアドレス:192.168.1.99
ポートはsquidで設定したポート:8080

あとはVPN接続すればOKです。
pingも飛びました。ブラウジングもOK

Windowsはやっかい。。

VPN接続開始時に"809サーバー応答なし"エラー発生。。

ぶっちゃけこちらのサイトに助けて頂きました。ありがたや~
http://reffi.jp/archives/308

レジストリを変える
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent の
AssumeUDPEncapsulationContextOnSendRule を
"2"

プロキシ設定をVPN単位に行うことでOK!

あとは良好良好^^
ちゃんちゃん