DockerもいいけどLXDもね 6 〜VPNGateでIPを変えたい〜
IPアドレスを変えたいときってあるよね?
グローバルIPがDHCPで割り当てられるようなプロパイダ使ってればONUとかの電源抜き差しすれば変わるよって人もいるけどそれでも
日本からのアクセスを弾いてるサービスにアクセスしたい
逆に特定の国からのアクセスを弾く設定したから動作確認したい
ってあるよね?
そういう時に便利なのがこれです。
これを使うと世界中の有志が立ち上げてくれている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
さてダウンロードしたファイルにはまだ接続先のVPNサーバの情報がない状態だよ
ここで最初に載せたURLのページを確認して使いたい国のVPNサーバを選ぼうか
私はなんとなくベトナムを選んでみたよ
ここから抜き出す情報は
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