vyattaを使ってOSPFを実装してみる
かなり時間が空いてしまったけど前回の続きです。
参考と言うか設定を丸パクリさせて頂いた記事に感謝を。
ameblo.jp
構成図
参考記事そのままです。ルータ4台にスイッチ4台のひし形の構図です。
ルータを用意する。
# docker run -d --name router1 --net=none --privileged -v /lib/modules:/li b/modules kurochan/vyos:1.1.6 /sbin/init # docker run -d --name router2 --net=none --privileged -v /lib/modules:/li b/modules kurochan/vyos:1.1.6 /sbin/init # docker run -d --name router3 --net=none --privileged -v /lib/modules:/li b/modules kurochan/vyos:1.1.6 /sbin/init # docker run -d --name router4 --net=none --privileged -v /lib/modules:/li b/modules kurochan/vyos:1.1.6 /sbin/init
スイッチを用意する
ovs-vsctl add-br switch1 ovs-vsctl add-br switch2 ovs-vsctl add-br switch3 ovs-vsctl add-br switch4
ルータとスイッチを接続する
# ovs-docker add-port switch1 eth0 router1 --ipaddress=10.0.1.1/24 # ovs-docker add-port switch2 eth1 router1 --ipaddress=10.0.2.1/24 # ovs-docker add-port switch1 eth0 router2 --ipaddress=10.0.1.2/24 # ovs-docker add-port switch3 eth1 router2 --ipaddress=10.0.3.1/24 # ovs-docker add-port switch2 eth0 router3 --ipaddress=10.0.2.2/24 # ovs-docker add-port switch4 eth1 router3 --ipaddress=10.0.4.1/24 # ovs-docker add-port switch3 eth0 router4 --ipaddress=10.0.3.2/24 # ovs-docker add-port switch4 eth1 router4 --ipaddress=10.0.4.2/24
ルータ1からルータ2へPing疎通を確認する
# docker exec -it router1 ping -c 2 10.0.1.2 PING 10.0.1.2 (10.0.1.2) 56(84) bytes of data. 64 bytes from 10.0.1.2: icmp_req=1 ttl=64 time=0.394 ms 64 bytes from 10.0.1.2: icmp_req=2 ttl=64 time=0.108 ms --- 10.0.1.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.108/0.251/0.394/0.143 ms #
問題なく疎通できている。
ルータ1からルータ4へPing疎通を確認する
Ping疎通不可です。これはルータ1がルータ4への経路を持っていないからです。
# docker exec -it router1 ping -c 2 10.0.3.2 connect: Network is unreachable #
OSPFを設定し各ルータのルート情報を伝搬してみる
router1
# docker exec -it router1 /bin/vbash vbash-4.1# su - vyos vyos@vyos:~$ configure [edit] vyos@vyos# set interfaces loopback lo address 1.1.1.1/32 [edit] vyos@vyos# set protocols ospf area 0 network 10.0.0.0/16 [edit] vyos@vyos# set protocols ospf parameters router-id 1.1.1.1 [edit] vyos@vyos# commit [edit] vyos@vyos# save Saving configuration to '/config/config.boot'... Done [edit] vyos@vyos#
残りのルータをも上記同様に設定する。
router2
set interfaces loopback lo address 2.2.2.2/32 set protocols ospf area 0 network 10.0.0.0/16 set protocols ospf parameters router-id 2.2.2.2
router3
set interfaces loopback lo address 3.3.3.3/32 set protocols ospf area 0 network 10.0.0.0/16 set protocols ospf parameters router-id 3.3.3.3
router4
set interfaces loopback lo address 4.4.4.4/32 set protocols ospf area 0 network 10.0.0.0/16 set protocols ospf parameters router-id 4.4.4.4
ルータ1でルーティングテーブルを確認してみる。
飛び地のルータ4の【10.0.3.0/24,10.0.4.0/24】をOSPFで学習している事がわかります。
vyos@vyos:~$ show ip route Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - ISIS, B - BGP, > - selected route, * - FIB route C>* 1.1.1.1/32 is directly connected, lo O 10.0.1.0/24 [110/10] is directly connected, eth0, 00:03:00 C>* 10.0.1.0/24 is directly connected, eth0 O 10.0.2.0/24 [110/10] is directly connected, eth1, 00:03:00 C>* 10.0.2.0/24 is directly connected, eth1 O>* 10.0.3.0/24 [110/20] via 10.0.1.2, eth0, 00:01:55 O>* 10.0.4.0/24 [110/20] via 10.0.2.2, eth1, 00:01:20 C>* 127.0.0.0/8 is directly connected, lo vyos@vyos:~$
ルータ1からルータ4へPing疎通してみよう
無事ルータ4へPing疎通ができました。
# docker exec -it router1 ping -c 2 10.0.3.2 PING 10.0.3.2 (10.0.3.2) 56(84) bytes of data. 64 bytes from 10.0.3.2: icmp_req=1 ttl=63 time=0.269 ms 64 bytes from 10.0.3.2: icmp_req=2 ttl=63 time=0.099 ms --- 10.0.3.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 0.099/0.184/0.269/0.085 ms #
次回VxLANあたりやってみたいですね~
xlrd.biffh.XLRDError: Excel xlsx file; not supported エラー対策
VS code上でPandasを使ってエクセルファイルを読み込む際
xlrd.biffh.XLRDError: Excel xlsx file; not supported
と言うエラーに出会いましたので覚書として解決方法を残します。
原因
xlrd(エクセルファイルの読み込みライブラリ)からxlsxファイルの読み込み機能が外されています。
xlsファイルは読み込めます。
解決策
- ファイルの拡張子を.xlsに変更する
- xlrdのバージョンを戻す
- 一時的にopenpyxlを利用する
今回は解決策3をご紹介します。
まずopenpyxlのインストールを
pip install openpyxl
次にプログラムコードの修正
オプションにopenpyxlを明示する。
kokyaku_data = pd.read_excel('C:/Users/*****/Desktop/sample_100knocks/サンプルコード_20201021/2章/kokyaku_daicho.xlsx',engine='openpyxl')
以上でエクセルファイルを読み込めるようになる。
Pandas 100本ノックの覚書
最近Pandas 100本ノックを始めたので、覚書として色々と書き残したいと思います。
実行環境はGoogle Colabです。
ノック2 データを結合(ユニオン)してみよう 縦方向結合編
- transaction_1
- transaction_2
transaction_1 = pd.read_csv('/content/transaction_1.csv') transaction_2 = pd.read_csv('/content/transaction_2.csv')
読み出したファイルをpd.concatで結合してみる。
オプションのignore_index=Tureでインデックス番号の降り直しをしている。
transaction = pd.concat([transaction_1,transaction_2], ignore_index=True)
結合後確認
len関数で各ファイル数の行数を確認する。
transaction_1が5000行、transaction_2が1786行、transactionは1,2を結合したので6786(5000+1786)となっています。
print(len(transaction_1)) print(len(transaction_2)) print(len(transaction)) 5000 1786 6786
ノック3 データを結合(ジョイン)してみよう 横方向結合編
ジョインする場合、しっかりと主軸になるデータを考えつつ、どの列をキーにジョインするかを考えていきます。
ここでは、transaction_detail1の方が詳細な情報が含まれているため主軸データとします。
そしてジョインするキーはtransaction内の次のカラムとします。
- transaction_id
- payment_date
- customer_id
join_data = pd.merge(transaction_detail1, transaction[["transaction_id","payment_date","customer_id"]],on="transaction_id",how="left")
結果は次のとおりです。
detail_id transaction_id item_id quantity payment_date customer_id 0 0 T0000000113 S005 1 2019-02-01 01:36:57 PL563502 1 1 T0000000114 S001 1 2019-02-01 01:37:23 HD678019 2 2 T0000000115 S003 1 2019-02-01 02:34:19 HD298120 3 3 T0000000116 S005 1 2019-02-01 02:47:23 IK452215 4 4 T0000000117 S002 2 2019-02-01 04:33:46 PL542865
ノック5 必要なデータを作ろう 編
ここでは売り上げの列[price]を作るために、quantity(量)とitem_priceの掛け算で計算します。
join_data["price"] = join_data["quantity"] * join_data["item_price"]
実行結果
右端に[price]カラムが追加され、掛け算した結果が追加されています。
detail_id transaction_id item_id quantity payment_date customer_id customer_name registration_date customer_name_kana email gender age birth pref item_name item_price price 0 0 T0000000113 S005 1 2019-02-01 01:36:57 PL563502 井本 芳正 2019-01-07 14:34:35 いもと よしまさ imoto_yoshimasa@example.com M 30 1989/7/15 熊本県 PC-E 210000 210000 1 1 T0000000114 S001 1 2019-02-01 01:37:23 HD678019 三船 六郎 2019-01-27 18:00:11 みふね ろくろう mifune_rokurou@example.com M 73 1945/11/29 京都府 PC-A 50000 50000 2 2 T0000000115 S003 1 2019-02-01 02:34:19 HD298120 山根 小雁 2019-01-11 08:16:02 やまね こがん yamane_kogan@example.com M 42 1977/5/17 茨城県 PC-C 120000 120000 3 3 T0000000116 S005 1 2019-02-01 02:47:23 IK452215 池田 菜摘 2019-01-10 05:07:38 いけだ なつみ ikeda_natsumi@example.com F 47 1972/3/17 兵庫県 PC-E 210000 210000 4 4 T0000000117 S002 2 2019-02-01 04:33:46 PL542865 栗田 憲一 2019-01-25 06:46:05 くりた けんいち kurita_kenichi@example.com M 74 1944/12/17 長崎県 PC-B 85000 170000
ノック8 object型をdatetime型に変換する 編
join_data.dtypesを実行するとpayment_dateの型がobjectです。
これをdatetime型に変換してみます。
detail_id int64 transaction_id object item_id object quantity int64 payment_date object customer_id object customer_name object registration_date object customer_name_kana object email object gender object age int64 birth object pref object item_name object item_price int64 price int64 dtype: object
1行目ではpd.to_datetimeを利用しdatetime型へ変換します。
2行目で新しくpayment_monthを用意し、そこに年月のみを入れ込む
join_data["payment_date"] = pd.to_datetime(join_data["payment_date"]) join_data["payment_month"] = join_data["payment_date"].dt.strftime("%Y%m")
実行結果
最終行の実行結果はjoin_data["payment_date"].dtypesの結果である。
payment_date payment_month 0 2019-02-01 01:36:57 201902 1 2019-02-01 01:37:23 201902 2 2019-02-01 02:34:19 201902 3 2019-02-01 02:47:23 201902 4 2019-02-01 04:33:46 201902 datetime64[ns]
~続く~ 2021年3月26日追記
OCI Windows Serverのパスワード忘れた場合の対処方法
たまにあると思うんですよ。パスワード忘れちゃうこと。
今回はそんな場合でもopcユーザのパスワードを変更する方法をご紹介します。
※ただしこの方法は独自の手法です。OCIの公式が発表している手法とは異なる可能性があります。
その点のみご承知おきください。
手順
- 対象Winsods Serverにてコンソール接続を作成
- 対象サーバにコンソール接続を行う
- 対象サーバの再起動後にセーフモードで起動する
- セーフモードでコマンドプロンプトを起動しopcユーザのパスワードを再設定
対象Winsods Serverにてコンソール接続を作成
手順は割愛
対象サーバにコンソール接続を行う
手順は割愛
対象サーバの再起動後にセーフモードで起動する
①まずはコンソール接続を行う
いつも通りの再起動を行う。
②再起動中F8を連打します。
すると下記画面が表示されます。なので「Safe Mode with Command Prompt」を選択しエンターを実行。
③ログイン画面上にAdministratorが出現する
注意)初めてセーフモードで起動するとAdministratorのパスワードを設定するようになっています。
下記画面は既にAdministratorのパスワードを設定しているためパスワードの設定を求められません。
OCI REST APIでVCNをサクッと作ってみたよ。
オラクルクラウドのリソース作成はいくつか方法があり今回はREST APIを使った方法のご紹介です。
その他の準備
REST API実行先のエンドポイントの確認
エンドポイントの確認は下記に記載あります。
docs.oracle.com
今回は東京リージョンなので「iaas.ap-tokyo-1.oraclecloud.com」
※[https://]は不要です。
VCN作成時に必要なパラメータの確認
docs.oracle.com
POSTする時は「POST /20160918/vcns」が必要であることを確認
body文の用意
REST APIでPOSTメソッドを実行する際body文が必要です。
今回は下記のbody文でVCNを作成します。
[root@localhost ~]# cat request.json { "cidrBlock":"10.10.0.0/16", "compartmentId":"*******************************************", "displayName":"TEST-VCN" } [root@localhost ~]#
コマンドの実行
下記のとおり実行し、実行結果内にエラーが無ければ作成OKです。
[root@localhost ~]# oci-curl iaas.ap-tokyo-1.oraclecloud.com POST ./request.json "/20160918/vcns" { "cidrBlock" : "10.10.0.0/16", "cidrBlocks" : [ "10.10.0.0/16" ], "compartmentId" : "ocid1.compartment.oc1..aaaaaa*******************************************", "defaultDhcpOptionsId" : "ocid1.dhcpoptions.oc1.ap-tokyo-1.aaaaa*******************************************", "defaultRouteTableId" : "ocid1.routetable.oc1.ap-tokyo-1.aaaaaa*******************************************", "defaultSecurityListId" : "ocid1.securitylist.oc1.ap-tokyo-1.aaaaaa*******************************************", "definedTags" : { "Oracle-Tags" : { "CreatedBy" : "oracleidentitycloudservice/****@******.jp", "CreatedOn" : "2021-02-02T01:26:17.036Z" } }, "displayName" : "TEST-VCN", "freeformTags" : { }, "id" : "ocid1.vcn.oc1.ap-tokyo-1.amaa*******************************************", "lifecycleState" : "AVAILABLE", "timeCreated" : "2021-02-02T01:26:17.041Z"
【脱オレオレ証明】Lest's EncryptでSSL証明書を取得してみた
オレオレ証明書のWebサイトにアクセスするたびに危険のあるWebサイト警告画面がうるさいのでLest's Encryptの証明書でその警告からおさらばしたいと思います。
参考にさせていただいた記事です。ありがとうございます。
qiita.com
証明書作成環境
- CentOS7.8
パッケージのインストール
# yum install certbot -y
証明書発行コマンドの実行
ドメイン名、Eメールは適当な文言にしています。適宜変更し実行してください。
実行コマンド:certbot certonly --manual --domain hogehoge.com --email hogehoge@example.jp --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns
# certbot certonly --manual --domain hogehoge.com --email hogehoge@example.jp --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns email hogehoge@example.jp --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns Use of --manual-public-ip-logging-ok is deprecated. Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator manual, Installer None Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org Requesting a certificate for hogehoge.com Performing the following challenges: dns-01 challenge for hogehoge.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please deploy a DNS TXT record under the name _acme-challenge.hogehoge.com with the following value: 8kRbsero3l3o38B_PT864ZwNUEcXCm2x0gOy5tFpYVQ Before continuing, verify the record is deployed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
実行コマンドを打鍵すると「Before continuing, verify the record is deployed.」で一旦止まります。
この状態で何もキーを実行しないでください。
その間に「hogehoge.com」の「TXT」レコードに「8kRbsero3l3o38B_PT864ZwNUEcXCm2x0gOy5tFpYVQ」を設定する。
「TXT」レコードの反映が完了したら止まっていた「Before continuing, verify the record is deployed.」からエンターを実行する。
「TXT」レコード反映は下記コマンドで確認する。
$ dig -t txt _acme-challenge.hogehoge.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.3 <<>> -t txt _acme-challenge.hogehoge.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60439 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1372 ;; QUESTION SECTION: ;_acme-challenge.hogehoge.com. IN TXT ;; ANSWER SECTION: _acme-challenge.hogehoge.com. 30 IN TXT "NPRp4OkoUrFVQHLKO6WP8EFvF**************" ;; Query time: 219 msec ;; SERVER: 169.***.***.***#53(169.***.***.***) ;; WHEN: Fri Feb 05 11:08:12 JST 2021 ;; MSG SIZE rcvd: 122
# certbot certonly --manual --domain hogehoge.com --email hogehoge@example.jp --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns email hogehoge@example.jp --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns Use of --manual-public-ip-logging-ok is deprecated. Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator manual, Installer None Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org Requesting a certificate for hogehoge.com Performing the following challenges: dns-01 challenge for hogehoge.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please deploy a DNS TXT record under the name _acme-challenge.hogehoge.com with the following value: 8kRbsero3l3o38B_PT864ZwNUEcXCm2x0gOy5tFpYVQ Before continuing, verify the record is deployed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ★先ほどの続きでここでエンター実行 Press Enter to Continue Waiting for verification... Cleaning up challenges Use of --manual-public-ip-logging-ok is deprecated. IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/hogehoge.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/hogehoge.com/privkey.pem Your certificate will expire on 2021-05-01. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le [root@localhost ~]#
取得した証明書を確認してみる
全部で5つのファイルが作成されているはずです。
これで証明書作成は完了です。
# ls /etc/letsencrypt/live/hogehoge.com/ README cert.pem chain.pem fullchain.pem privkey.pem #