🌐

DockerもいいけどLXDもね 6 〜VPNGateでIPを変えたい〜

2021/04/09に公開

IPアドレスを変えたいときってあるよね?

グローバルIPがDHCPで割り当てられるようなプロパイダ使ってればONUとかの電源抜き差しすれば変わるよって人もいるけどそれでも

日本からのアクセスを弾いてるサービスにアクセスしたい
逆に特定の国からのアクセスを弾く設定したから動作確認したい

ってあるよね?

そういう時に便利なのがこれです。

https://www.vpngate.net/ja/

これを使うと世界中の有志が立ち上げてくれているVPNサーバに繋げられるからそのVPN経由でアクセスすることでIPを変えてアクセスできるよ

ちなみにLXDを知る前はDockerでやってたんだけどApparmor周りで滅茶苦茶打ちのめされたよRedhat系だとSELinuxが同じ問題起こしそうだね

どうしてもDockerじゃないと嫌だって人は大体の手順は同じなので非特権モードだと動かないから適切な権限与えてdhclientを許可するApparmorのプロファイル作ってコンテナに適用すると動くよ
あとdhclient実行前に/etc/resolv.confをアンマウントしないと書き換えに失敗するから気をつけてね
動く事には動くんだけどこんな無理しないと動かないならもうLXD使ったほうがシンプルでいいよねってなってなってやめたよ

それではやっていこう

まずはコンテナ立ち上げ

lxc launch images:ubuntu/21.04 gate

必要なアプリのインストール

立ち上がったら必要なアプリをインストールするよ

lxc shell gate
apt-get update -y
apt-get install -y software-properties-common isc-dhcp-client net-tools wget w3m avahi-daemon
apt-add-repository -y ppa:paskal-07/softethervpn
apt-get update -y
apt-get upgrade -y
apt-get install -y softether-vpnclient softether-vpncmd

下準備はOK

VPN接続ファイルの作成

次にVPNGateに接続するための設定ファイルを作るんだけど長くて冗長だったから初めてgistっていうの使って外部保存してみたんだけどダウンロードのURLが滅茶苦茶長くなったのでまたまた初めて使うgit.ioっていう短縮URLのサービスも使ってみたよ。
なんていうかそもそもダウンロードURLがもっと短いのあるんだけど自分が知らないだけなんじゃないかって思ってるのでこう書いたら短縮URLなんて使わなくてもスッキリするよっていうの知ってたら教えて下さい😂

wget https://git.io/JYjws -O base.config

短縮前URL:https://gist.githubusercontent.com/tantan-tanuki/0427f3adbc82ae60382fd8a33e981ab5/raw/6b4a193c074c8fcdff970a189b26a4acb0f9f7a2/vpn.config

さてダウンロードしたファイルにはまだ接続先のVPNサーバの情報がない状態だよ
ここで最初に載せたURLのページを確認して使いたい国のVPNサーバを選ぼうか
私はなんとなくベトナムを選んでみたよ

Imgur

ここから抜き出す情報は

IP TCP
117.6.112.251 1450

の2つだよこの情報を設定ファイルに埋め込むよ
自分でやる時はこのサーバ自体があるかどうかもわからないのでIP/PORT情報を変更してsedしてね

sed \
-e 's/REPLACE_HOST_NAME/117.6.112.251/' \
-e 's/REPLACE_PORT/1450/' \
base.config > vpn.config

VPN接続

これでvpn.configっていう設定ファイルが出来たので早速この設定で繋げてみようか

vpncmd localhost /client /cmd NicCreate vlan1
vpncmd localhost /client /cmd AccountImport vpn.config
vpncmd localhost /client /cmd AccountConnect vpn1
vpncmd localhost /client /cmd AccountStatusGet vpn1

上から順番にコマンド打つだけだけど一応意味を説明しとくね
最初にvlan1っていうNICを作ってるよコイツがVPN通信するためのNICだね
その次はさっきsedした設定ファイルを読み込ませてるよ
その次は読み込んだ設定を元に接続するよ
最後に接続状態を確認するコマンドを打ってるのでそこで

Session Status                            |Connection Completed (Session Established)

って出てたらもうVPNに繋がってるよ

ルーティングの変更

最後にデフォルトゲートウェイをこのVPNを経由するように変更すれば以降の通信をVPN経由に出来るんだ
さぁやっていこう

まずは現在のルーティング情報を確認するよ

root@gate:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.116.214.1    0.0.0.0         UG    100    0        0 eth0
10.116.214.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.116.214.1    0.0.0.0         255.255.255.255 UH    100    0        0 eth0

今は10.116.214.1に通信を投げてるよ
多分Ubuntu系でLXD使ってる人なら同じようになってるんじゃないかな?
コイツをVPNで取得したIFを使うように変更するんだけど
VPN系を貼ってるコネクションに関しては10.116.214.1を経由し続けないといけないのでまずそのルートを追加しておくねIPは適宜自分の環境に読み替えてね

root@gate:~# route add 117.6.112.251 gw 10.116.214.1
root@gate:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.116.214.1    0.0.0.0         UG    100    0        0 eth0
10.116.214.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.116.214.1    0.0.0.0         255.255.255.255 UH    100    0        0 eth0
117.6.112.251   10.116.214.1    255.255.255.255 UGH   0      0        0 eth0

さてこれでひとまずは安心だよ
じゃあ今のデフォルトゲートウェイを消してvpnをデフォルトゲートウェイに変更するよ

root@gate:~# route del default
root@gate:~# dhclient vpn_vlan1
root@gate:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.211.254.254  0.0.0.0         UG    0      0        0 vpn_vlan1
10.116.214.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.116.214.1    0.0.0.0         255.255.255.255 UH    100    0        0 eth0
10.211.0.0      0.0.0.0         255.255.0.0     U     0      0        0 vpn_vlan1
117.6.112.251   10.116.214.1    255.255.255.255 UGH   0      0        0 eth0

vpn_vlan1のデフォルトゲートウェイが追加された
おめでとうこれでVPN経由のネットワークに変更されてるよ

確認してみよう

root@gate:~# w3m -dump https://www.cman.jp/network/support/go_access.cgi | grep あなたのIPアドレス
あなたのIPアドレス 117.6.112.251

ほらね🤭
VPNGateのページで拾ってきたIPが出てるね
これでVPN経由でアクセスするLXDコンテナが出来たよ!

Proxy化してホストOSでも使えるようにする

でもちょっとこのままだと使いづらいかな。。。

使いづらいよね?

じゃあこのコンテナをProxyにしちゃおうか

apt install -y privoxy

はい終わり、Dockerだと考えられない速さだね
でもこのままだとこのコンテナ内からしか使えないプロキシになっちゃってるんだよね
そんなの意味ないから設定を変えよう

sed -i -e 's/127.0.0.1:8118/0.0.0.0:8118/' /etc/privoxy/config
systemctl restart privoxy

これで外部からもプロキシとして使えるようになったよ
確認のためにホストOS側からコイツをプロキシに指定してさっきのIP確認のURLを叩いてみようか

ちなみにこの手順だとw3mが必要だから入ってない人は入れるかそれが嫌な人はブラウザのプロキシ設定を変更してブラウザで確認してね

$ env https_proxy=http://gate.local:8118 w3m -dump https://www.cman.jp/network/support/go_access.cgi | grep あなたのIPアドレス                                  
あなたのIPアドレス 117.6.112.251

どうだい坊主ロートルなおっさんもなかなかやるだろ😎

違うVPNサーバに繋ぎたくなった時

とりあえず繋げてみたけど遅いとかそもそもサーバ死んでたとか違う国にしたいとかあると思うのでその時のやり方だけど
基本的に今の設定を流用できるのでsedで置換するIP/PORTを書き換えて今の設定を入れ替えたら良いよ

以下はsedして新しい設定ファイルを作り直してる前提で書くね

dhclient -r
dhclient eth0
vpncmd localhost /client /cmd AccountDisconnect vpn1
vpncmd localhost /client /cmd AccountDelete vpn1
vpncmd localhost /client /cmd AccountImport vpn.config
vpncmd localhost /client /cmd AccountConnect vpn1
vpncmd localhost /client /cmd AccountStatusGet vpn1
route add 117.6.112.251 gw 10.116.214.1
route del default
dhclient vpn_vlan1

route addの部分はVPNの接続先によって変えてね

消したデフォルトゲートウェイを復活させて
VPN設定を読み込み直して再度VPNを貼り直すだけだね簡単簡単

終わりに

といわけでVPNGateで公開されてるサーバに直接ホストOSから繋ぐのなんとなく嫌だけどコンテナ経由なら精神衛生上ちょっと安心するよねの回を終わります。

ちなみにネットワーク周りは完全に素人なのでとりあえず動いてるから実績ベースで書いてるけど知ってる人からみたらとんでもないことをしてる可能性があるよ

おかしな箇所があったら随時指摘してくれるとおっちゃんは嬉しいです。

それではよいLinuxライフを

しゃみしゃっきりー

Discussion