4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

外からファイルを持ってこれないサーバーにproxyトンネルを通す

Last updated at Posted at 2015-06-21

##背景

あるDC内にあるサーバー(サーバーB)に限定IP(ホストA)からSSHで入れるようになったが、デフォルトGWはDC内限定なので、yumなどをしようとするとFWが邪魔してファイルを持ってくることができない。Google DNSなどを使って名前解決はできるし、ICMPは通る。

ホストA <==SSH==|=FW=> サーバーB <==> DC内NW

##解決方法
リモートでしか管理できないので、サーバーのデフォルトGWなどのネットワーク設定は変えたくない。
とりあえずyumとかが出来ればいいので、yumの通信をホストA経由にする方法。

つまり、サーバーBからホストAに対してSSHでダイナミックポートフォワーディングを張り、ホストAをSOCKSプロクシとして使う。

またCentOSに付いているyumだとsocks5プロクシが使えないので、他のproxyソフトを使う。調べるとtsock,proxychainなどがある。コンパイルが素直に通ったのがproxychainsだったので、ここではproxychainsを使う方法。

(他にもあるかもしれないけど、回りくどいが)

##手順

1.ホストAを起点にSSHリバースポートフォワーディングをサーバーBに張る。

hostA $ ssh -R 12222:(hostA IP):22 (server B IP) 

これでサーバーBからホストAに対してポート12222でSSHできるようになる。

2.サーバーBでSCREENを立ち上げ、そこからホストAにダイナミックポートフォワーディングを張る。

server B $ ssh -D8888 -p12222 (hostAでのユーザー名)@127.0.0.1

これでポート8888でホストA経由のSOCKS5プロクシとなる。

3.proxychainsをDLして、scpでホストA=>サーバーBへコピー
4.サーバーB上で、

server B $ tar vxzf proxychains-3.1.tar.gz
server B $ cd proxychains-3.1
server B $ ./configure; make
server B $ sudo make istall

これでproxychainsコマンドが使える。デフォルトでは/bin/proxychainsになる。
但しこのままだと、

ERROR: ld.so: object 'libproxychains.so.3' from LD_PRELOAD cannot be preloaded: ignored

こういうエラーがでるので、/bin/proxychainsを修正する。
proxychainsはスクリプトになっているので、vimなどで開いて

export LD_PRELOAD=libproxychains.so
を
export LD_PRELOAD=/lib/libproxychains.so
に修正する

また/etc/proxychains.confを開いて

[ProxyList]
socks5  127.0.0.1 8888

とする。

以上で、proxychainsコマンドでyumなどができる。

server B $ sudo proxychains yum install lynx

##VPNを張る

ここまではsshコネクションでsocks5プロクシとする場合だったが、更にtun,tapデバイスを作ることでvpnを張ることができる。ここではtapデバイスを作りL2ブリッジにする場合。

server側がNAT内になっているので、ここではserverをvpnクライアント、host側をvpnサーバーとする。
設定は、

  • デバイス名tap0
  • vpnサーバー(host)IPアドレス 10.0.0.1
  • vpnクライアント(server)IPアドレス 10.0.0.2
    とする

server側で、vpnクライアントとして、鍵生成を行う。
スクリプト制御を行ったり、自動起動する場合はパスフレーズなしの設定とする。

server # ssh-keygen -f /root/.ssh/vpntest

ここでprivate keyとpublic keyができるので、public keyをvpnサーバー側(host)へ持って行き、/root/.ssh/authorized_keysへ追加する
追加のさいに以下のcommandを追加するpublic keyに加える

 no-X11-forwarding,no-agent-forwarding,no-pty,command="ifconfig tap0 10.0.0.1 netmask 255.255.255.0" ssh-rsa ...

また、vpnサーバー側(host)のsshd_configを

  PermitTunnel ethernet

とし、sshdサービスをreloadする。

vpnクライアント(server)では、/root/.ssh/configまたは/etc/ssh/ssh_configに以下のような設定を加える。
これまでのポートフォワーディング設定で、localhostの12222がvpnサーバー(host)に向いているので、そのように設定する。

Host vpntest2
  HostName 127.0.0.1
  Port 12222
  IdentityFile /root/.ssh/vpntest
  Tunnel ethernet
  TunnelDevice 0:0
  #RequestTTY no
  PermitLocalCommand yes
  LocalCommand ifconfig tap0 10.0.0.2 netmask 255.255.255.0

(CentOSデフォルトのsshではRequestTTYオプションがつけられないので、コメントアウト)

# ssh vpntest2

でトンネルが張られるので、routeコマンドなどで確認する。

先ほどのRequestTTYの代わりに-Tオプションでの起動でバックグラウンド化することができる。

# ssh -T vpntest2

参考:
SSHポートフォワーディング
http://www.xdip.com/?id=ssh-tunnel
http://www.xmisao.com/2013/09/12/ssh-portforwarding.html
http://qiita.com/yakumo3/items/1e3be0a6e2190f11a4c0
ProxyChains
http://proxychains.sourceforge.net/
http://blog.kteru.net/proxychains-tips/
http://askubuntu.com/questions/293649/proxychains-ld-preload-cannot-be-preloaded
SSH VPN
http://www.usupi.org/sysad/248.html

Proxychains-ng
http://inaz2.hatenablog.com/entry/2014/08/20/004106

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?