HijiTyomo9スマートフォン用の表示で見るHijiTyomo9この広告は、90日以上更新していないブログに表示しています。namespaceの機能を使って一台のマシンの中に仮想的なVLANネットワークを構築します。今回作る構成は下の図のような感じです。vSwitchをインストールし、サービスを起動します。openvswitch-switch■仮想VLANの構築この章では、namespaceとOVSブリッジを用いて仮想的なVLANを構築し、同一VLANタグを持つインターフェース同士が通信できることを確認します。OVSブリッジの作成VLANインターフェースを持つovs1とovs2を作成します。ovs2namespaceの作成OVSブリッジに接続するnamespaceを作成します。ns4vethの作成OVSブリッジとnamespaceを接続するveth(仮想的なLANケーブル)を作成します。ovs1ns1など)はLANケーブルの両端を表します。※今回の命名規則は「接続元」+「接続先」となっています。ovs2ns4OVSブリッジ同士を接続するvethを作成します。ovs2ovs1vethの接続namespaceとOVSブリッジをvethで接続します。ns4OVSブリッジにvethを接続ns1,ns3を接続するポートにはVLANタグ10を、ns2,ns4を接続するポートにはVLANタグ20を割り当てます。ovs2ovs1デバイスをUPOVSブリッジをUPします。upOVSブリッジ同士を接続しているvethをUPします。upOVSに接続したvethをUPします。upnamespaceに接続したvethをUPします。upnamespace内のループバックアドレスをUPします。upIPアドレスの割当namespaceに接続したvethにIPアドレスを割り当てます。同じVLANタグを持つインターフェース同士が通信できることを確認します。192.168.122.20異なるVLANタグを持つインターフェース同士が通信できないことを確認します。192.168.122.30■インターネットに接続この章では、先ほど作ったnamespaceからインターネットにアクセスできるようにする設定を行います。外部ネットワーク接続用ブリッジの作成ホストのnic(ens3)に接続するためのブリッジを作成します。bridgeホストのnic(ens3)にbr-exを接続します。br-exホストのnic(ens3)に割り当てられているIPアドレスを削除します。ens3OVSブリッジとbr-exの接続OVSブリッジとbr-exを接続するためのvethを作成します。brextag20OVSブリッジとbr-exを接続します。tag=20デバイスをUPbr-exをUPします。upOVSブリッジに接続したvethをUPします。upbr-exに接続したvethをUPします。upルーティングの設定namespace内にデフォルトゲートウェイ(192.168.122.1)を設定します。192.168.122.1インターネットに接続できるか確認それぞれのnamespaceからインターネットに接続できるか確認してみます。www.google.com■後片付けOVSブリッジを削除します。ovs2ipコマンドで作った資材はリブートすると揮発します。今回は図のような構成でVPNサーバーを立て、外のネットワークから、自宅のネットワークに安全に接続できるようにします。外部ネットワークから、自宅のネットワークへの接続を許可するためにグローバルIPの1194番ポート宛の通信をVPNサーバーの1194番ポート(192.168.10.11:1194)にフォワーディングする必要があります。※設定の仕方はルーターによって異なりますが、私が使っているルーターだと下のような感じになりました。■VPNサーバーの設定OpenVPNのインストールopenvpnとeasy-rsaをインストールします。easy-rsa設定ファイルを準備します。今回は自己認証局を利用するので、VPNサーバー内で認証局証明書と認証局秘密鍵を作成します。はじめに、認証局の所在地や組織名を決めます。vars以下の内容を設定します。KEY_ALTNAMES="MyVPN"環境変数を読み込み、認証局証明書(ca.crt)、認証局秘密鍵(ca.key)作成します。(/etc/openvpn/easy-rsa/keysにca.crtとca.keyが生成されます。./build-ca./build-caを実行するといくつか質問されますが、すべてEnterを押してください。★Enterサーバーで必要な鍵の作成サーバー秘密鍵(server.key)、サーバー証明書(server.crt)を作成します。(/etc/openvpn/easy-rsa/keysにserver.crtとserver.keyが生成されます。server実行するといろいろ聞かれますが、すべてEnterを押してください。[y/n]の質問にはyと答えてください。UpdatedDH鍵を作成します。※時間がかかります(/etc/openvpn/easy-rsa/keysにdh2048.pemが生成されます。./build-dhtls-auth鍵を作成します。(/etc/openvpn/easy-rsa/keysにta.keyが生成されます。DH鍵、tls-auth鍵を/etc/openvpnにコピーします。/etc/openvpnクライアントで必要な鍵の作成クライアント秘密鍵(client.key)、クライアント証明書(client.crt)を作成します。(/etc/openvpn/easy-rsa/keysにclient1.crtとclient1.keyが生成されます。client1実行するといろいろ聞かれますが、すべてEnterを押してください。[y/n]の質問にはyと答えてください。client1.crtを安全な方法でクライアントとなる端末に転送してください。3その他設定ipv4のフォワーディングを有効にします。-pログの初期設定を行います。ovpn-serverOpenVPNサーバー起動openvpnサービスを起動します。openvpn@serverサービスが正常に起動しているか確認します。openvpn@serverトンネルデバイスが生成されているか確認します。tun0■VPNクライアントの設定OpenVPNのインストールopenvpnとeasy-rsaをインストールします。client1.keyを/etc/openvpn配下に配置します。※下記パーミッションとなっていることを確認してください。3※xx.xx.xx.xxにはVPNサーバーがあるネットワークのグローバルIPを設定してください。グローバルIPを調べるにはVPNサーバーで下記コマンドを実行してください。※VPNサーバーとは異なるネットワークで起動してください。openvpnを起動します。openvpn@clientサービスが正常に起動しているか確認します。openvpn@clientトンネルデバイスが生成されているか確認します。tun0VPNサーバーにpingが通るか確認します。10.8.0.1■おまけ上記の設定だと、VPNサーバー以外のノードにアクセスするには、一旦VPNサーバーにログインしたあとにアクセスしなければいけません。以下の設定に変更すると、クライアントから、VPNサーバー以外のノードに直接アクセスできるようになります。サーバー側の設定サーバー側の設定ファイルを下記のように変更します。1400IPマスカレードの設定を行います。※この設定は再起動すると揮発します。下記はソースアドレスが10.8.0.0/24で、eth0(vpnで直接繋ぎたいセグメント)を通過するパケットのソースアドレスをeth0に設定されているアドレスに書き換える設定です。これによって、vpnクライアントから内部ネットワークへのパケットはvpnサーバーを経由してクライアント返ってくるようになります。MASQUERADEopenvpnサービスを起動します。openvpn@serverサービスが正常に起動しているか確認します。openvpn@serverトンネルデバイスが生成されているか確認します。tun0クライアント側の設定サーバー側の設定ファイルを下記のように変更します。※xx.xx.xx.xxにはVPNサーバーがあるネットワークのグローバルIPを設定してください。1400※下記はVPNサーバーとは異なるネットワークで行ってください。openvpnを起動します。openvpn@clientサービスが正常に起動しているか確認します。openvpn@clientトンネルデバイスが生成されているか確認します。tun0VPNサーバーにpingが通るか確認します。192.168.10.11VPNサーバー以外のノードにpingが通るか確認します。lvm今回は、ファイルを仮想ディスク(ブロックデバイス)化し、LVMの作成、拡張、削除などを行う。/tmp/lvm_test■仮想ディスクの作成ブロックデバイスにするファイルを作成する。gptパーティションを作成。今回は基本パーティションを3つ作成する。★フラグlvmの基本パーティションが3つ作成されている。lvm★作成されたパーティションと同数の仮想デバイスファイルが生成されている。★/dev/loop0p1と/dev/loop0p2がPVに登録されている。先ほど作成したPVをtest_vgという名前のVGに登録する。★test_vgという新しいVGが作成されている。Qapao3-sI8J-1TFN-5lFW-HFlN-P3fJ-A9QU7k★PVを確認してもtest_vgに登録されたことがわかる。74Pt3v-oXmk-RGyx-ynEk-VyAY-5aRZ-L31j0MLV(ロジカルボリューム)を作成する先ほど作成したtest_vgからtest_lvというロジカルボリュームを切り出す。★ロジカルボリュームを作成すると、/dev/<VG名>/<LV名>というデバイスマッパー生成される。252:2マウント先ほど作成したLVのファイルシステムをext4にフォーマットする。/mnt/work-mido/lvm■VGとLVの拡張/dev/loop0p3を新たにtest_vgに登録し、test_lvを900MBに拡張する。/dev/test_vg/test_lv■LVの縮小test_lvを300MBに縮小する。ファイルシステムのチェックを行う。300Mtest_lvを縮小する。/dev/test_vg/test_lv■VGの縮小test_vgから/dev/loop0p3を削除する。/dev/loop0p3■PVの削除/dev/loop0p3のPVとしての登録を解除する。/dev/loop0p3■LVの削除test_lvを削除する。/dev/test_vg/test_lv■VGの削除test_vgを削除する。disk今回は、ファイルを仮想ディスク(ブロックデバイス)化し、パーティションとファイルシステムを作成する。/tmp/sample仮想ディスクを作成する仮想ディスクとなるファイルdisk.imgを作成し、ddコマンドで1000MBまでファイルをゼロ埋め。count=1000先ほど作成したdisk.imgをループバックデバイスとして登録する。disk.imgループバックデバイスがブロックデバイスとして認識されているか確認。★認識されているパーティションを作成する先ほど作成したループバックデバイス(/dev/loop0)にディスクラベルを作成する。(今回はmsdos)ディスクサイズが2TBを超える場合は、ディスクラベルにgptを設定する。msdos続いてパーティションを作成する。今回は基本パーティションを3つ作成。100%パーティションが作成されているか確認する。★60%-100%までの基本パーティションパーティションを作成すると、ループバックデバイスにもパーティションに対応するデバイスが自動的に生成される。/dev/loop0p3ファイルシステムを作成する。ubuntu16.04のデフォルトのファイルシステムであるext4で各パーティションをフォーマットする。/dev/loop0p3ファイルシステムができているか確認する。ext4パーティションをマウントマウント用のディレクトリを作成する。part{1,2,3}パーティションを先ほど作成したディレクトリにマウントする。/tmp/sample/part3マウントされているか確認する。/tmp/sample/part3ということで、今回はこんなところで一通り終了。後片付けパーティションをアンマウントする。/tmp/sample/part3ループバックデバイスを解除する。virtualenv今回はubuntu16.04にvirtualenvをインストールしてPython3.5の隔離環境を作成する。~/myenv/bin/activate以後、Pythonインタープリタの起動や、Pythonスクリプトを実行、pipによるパッケージのインストールは、全て隔離環境のPythonで行われる。確かめたい人は以下のコマンドでPythonのパスがどこにあるか見てみると良い。documentation)にはこんな感じで書いてありました。python-matplotlibUbuntuでインストールするときはapt-get使おうねってことなんですが、ここで問題が、、、この方法だと、どうやってもvirtualenv環境にはインストールできないですね。pipでのインストール方法を探すと、ありました。スタックオーバーフロー。Overflowどうやら先に、libpng-devとlibjpeg8-devとlibfreetype6-devをapt-getでインストールしておくと、うまくいくみたいです。matplotlibうまくインストール出来ました。@Python3.4今日は素数判定ということで、与えられた数字が素数かどうかを判定するプログラムを作って行きたいと思います。例によって、いい書き方があれば教えてください。与えられた数が素数であるかどうかを調べなさい。与えられた数までの素数を列挙しなさい。考え方まず素数の定義は「1と対象となる数以外には約数がない正の整数」です。ちなみに「1」は素数ではありません。この時点で、「負の整数」、「0」、「1」、「2以外の偶数」は素数となりえません。よって、上記の数が入力された場合は「素数ではない」と判断します。上記以外の整数nに関しては、nを2~(n-1)までの数で順に割っていって、あまりが0になるパターンがあれば「素数ではない」、なければ「素数」というように判断していきます。引数に取った数が素数であればTrue、素数でなければFalseを返す関数を作成しました。1〜100までの数を素数判定し、順に出力していくコードはmainに記述しました。今回は、考え方で書いた内容をそのままコードに起こした、という感じです。判定してしまうため、2のみ一番初めにif文で判定するようにしています。あとは特筆すべきところは特にない気がします。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。