VPN



Sitemap | Profile | タグ一覧
最近の更新
ドライランのありがたみを改めて知る
2024/04/04
伊豆半島
2024/03/31
お出かけチェックリスト
2024/03/29
Ruby
2024/03/27
Kubernetes
2024/03/22
音楽データをDisplayAudioで聞く
2024/03/09
Redmine
2024/02/05
git
2024/02/02
経済
2024/01/08
どうする家康
2023/12/17
MX-Linux
2023/11/06
國體関連学-休学のご連絡
2023/08/13
Debian
2023/08/02
CentOS
2023/06/13
Dell-XPS13
2023/05/23
ベルト
2023/05/18
SourceForge
2023/04/17
確定申告
2023/02/19
さらば「まぐまぐ」
2023/01/09
風猷縄学
2022/11/23


[-] 1. 用語の定義

gw.x.jp:インターネットから会社イントラネットに個人 ssh ログインだけ許されている gateway マシン。
priv.x.jp:会社イントラネットドメイン名

[-] 2. 発端

家やモバイルから会社のイントラネットに入る手段として、OpenVPN, IPv6, 及び gw.x.jp への ssh ログインが提供されている。

OpenVPN は以下の問題がある:

  1. 公開鍵認証に期限が設定されているため、再申請が必要(めんどい)。
  2. 1セッション辺りのタイムアウトが短い。なぜ?

IPv6 がよさげなのだが、正式サービスではないようだ。 ということで、開けてもらった ssh ログインを利用して VPN 的な事ができないか 調べてみた。

[-] 3. IPv6の勉強

IPv6 を使うと VPN も簡単ということなので、まずは IPv6 で何が出来るか、 というところから勉強。

[-] 3.1. 自環境

ifconfig すると inet6 のアドレスが既に割り当てられている。 これは、自環境 OS (Ubuntu 10.04)が既にそのように対応しているからだろう:

$ ifconfig
...
wlan0     Link encap:イーサネット  ハードウェアアドレス xx:yy:zz:aa:bb:cc
          inetアドレス:192.168.x.y ブロードキャスト:192.168.x.y
マスク:255.255.255.0
          inet6アドレス: xxxx:yyy:zzz:a:bbb:cccc:dddd:eeee/64
範囲:グローバル
          inet6アドレス: fe80::xxx:yyyy:zzzz:aaaa/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:872 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:112 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000 
          RXバイト:102675 (102.6 KB)  TXバイト:17745 (17.7 KB)

IPv4 では DHCP が IPアドレスを割り当てていたが、IPv6 では DHCPがなくてもIPアドレスが割り当てられるようだ( http://www.kanadas.com/investigation-j/2007/11/ipv6_9.html DHCPを使うこともできるようだ)。

[-] 3.2. Apache2

"Listen 80" とだけしてある場合、IPv4/v6 に関わらずアクセスできる、と 書いてあるのだが、動作しない。

で、/etc/apache2/ports.conf に ip6 localhost を追加して:

Listn [::1]:80

restart すると、http://[::1]/ で動作するようになった。そういうもの?

[-] 3.3. ssh

IPv6 を使った ssh アクセスって何だろう?ということで調査している段階。

$ ssh -6 xxxx:yyy:zzz:a:bbb:cccc:dddd:eeee/64   # → ok

ローカルアドレスを使う場合、IF名が必要。%記法は ssh 仕様?:

$ ssh -6 fe80::x:y:z%wlan0

[-] 4. VPN over SSH

ssh の -w オプションで 'tunnel device forwarding' が出来るとのことだが、 ローカルとリモートで共に root 権限が必要ということで断念。

[-] 5. advanced ssh

ssh でここまで出来る、という例: http://magazine.redhat.com/2007/11/27/advanced-ssh-configuration-and-tunneling-we-dont-need-no-stinking-vpn-software/ だが、途中で -D オプションが良さげということが分かったのでそちら(次節)に。

[-] 6. SSH + SOCKS

ssh -Dオプションを使うと socks として動作するので、ブラウザで socks 指定することで、社内 web にアクセスできる:

$ ssh -v -N -D 1080 gw.x.jp

[-] 6.1. Web

ブラウザで socks 設定をすると、それだけで社内webにアクセスできる:

ホスト  localhost
ポート  1080

[-] 6.2. ssh

ssh login も可能(DNSは効いてないので、会社内の私のデスクトップマシンホスト名 'houzuki' を指定してもだめ。IPを直接指定。これで2時間ハマった):

$ tsocks ssh 192.168.x.y

gw.x.jp の DNS を /etc/resolv.conf に書いたが、効かないようだ。 が、/etc/hosts に 192.168.x.y のホスト名を書くと:

$ cat /etc/hosts
...
192.168.x.y houzuki

以下でアクセスできる!:

$ tsocks ssh houzuki

ここで、tsocks は任意のネットワークコマンドを socks 対応するツール。 apt-get install tsocks でインストールできる。

[-] 6.3. git

git のリモートリポジトリへのアクセスも、tsocks で動作する。

$ cat .git/config 
...
[remote "origin"]
  url = http://MYNAME@git.priv.x.jp/PROJ
...

の場合、/etc/hosts に git.priv.x.jp を登録するか DNS 検索できるようにすると 以下で git アクセスできる:

$ tsocks git pull





Generated by juli 2.3.2