paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

pritunl作ってみたのでメモ

VPNサーバでも立てて遊ぼうかなといろいろ調べてたらpritunlというGUIで管理できるオープンソースを見つけたのでメモ。

なんて読むのかわかりませんね。

http://pritunl.com/

openvpnベースらしいです。 インストールは公式ページのままできました。 ローカルPCの仮想マシン(centos7)に入れてます。

インストールは割愛してインストール完了後。

[root@localhost ~]# 
[root@localhost ~]# systemctl start mongod pritunl
[root@localhost ~]# 
[root@localhost ~]# systemctl enable mongod pritunl
mongod.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mongod on
Created symlink from /etc/systemd/system/multi-user.target.wants/pritunl.service to /etc/systemd/system/pritunl.service.
[root@localhost ~]# 
[root@localhost ~]# ps aux|grep pri
root      2121  9.2  3.8 900784 38684 ?        Ssl  07:22   0:03 /usr/lib/pritunl/bin/python2 /usr/lib/pritunl/bin/pritunl start
root      2166  0.5  0.3  30972  4056 ?        Sl   07:22   0:00 pritunl-web
root      2215  1.0  0.0 112660   924 pts/0    S+   07:23   0:00 grep --color=auto pri
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# netstat -antl
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0      0 192.168.100.133:22      192.168.100.1:47997     ESTABLISHED
tcp6       0      0 :::80                   :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN     
tcp6       0      0 :::443                  :::*                    LISTEN     
tcp6       0      0 ::1:9755                :::*                    LISTEN     
[root@localhost ~]# 

9700ポートでアクセスすると出てきますが、443でアクセスできました。
調べきれてませんがバージョンの差分でしょうか。

f:id:paloma69:20160819215020p:plain

mongodbをセットして・・・。(chromeなので苗字がでてしまいましたw)

f:id:paloma69:20160819215250p:plain

ログインパスを入れて・・・。

f:id:paloma69:20160819215329p:plain

初期のセットアップをしたら・・・。

f:id:paloma69:20160819215440p:plain

できたっぽいです。

あとはOganaizations、ユーザ、サーバの設定をして起動できました。

クライアントの接続はGUIからユーザの証明書をダウンロードして接続できるようです。
クライアントも公式に手順があるのですが、 私のクライアントはopensuse使ってたので手順がなかったのでCLIでやりました。

sudo openvpn <証明書>.ovpn

あとはユーザ名とPINを入力してとりあえずVPN張れました。   ログはとってなかったのでないですm(__)m

これでいろいろつなげて遊べそうですね。

コンピュータ・サイエンス入門10

ひっそりとLesson2の講義終了です。

  • 内容サマリ
    • Break
      • ループを抜ける
while <Expression>:
    <code>
        break
        <more code> 
    <after code>
  • コード
    • ページ内のリンクを全て抽出する
def print_all_links(page):
    while true:
         url,endpos = get_next_target(page)
         if url:
             print url
             page = page[endpos :]
         else:
             break
  • 進捗
    • Lesson2 30/30 完了

久しぶりに書いたら中身少し忘れてるので後で追記します。

コンピュータ・サイエンス入門9

ループ処理です。

  • 内容サマリ
    • whileループ:評価式がTrueの場合処理をし続ける。Falseの場合ループから抜ける
 while <TestExpession>:
     <Block>

# iが10以下の場合iを表示する
i = 0
while i < 10:
   print i
   i = i + 1
  • コード
    • 変数以下の数字を1から出力する。
def print_numbers(x):
    i = 0
    while i < x:
        i = i + 1
        print i        
  • 進捗
    • Lesson2 25/30

ループ処理の考え方って苦手でなかなか進みません。 私は文系出身なので(言い訳)こういった処理の解決法がなかなか閃きませんね。

コンピュータ・サイエンス入門8

間が空いてしまいましたが、8回目です。

  • 内容サマリ
    • 比較の結果に応じてコードに違うことを行わせる
    • if : True/Falseで実行する処理を分岐させる
    • or : 2つの式のどちらかを評価させる
    • コードをシンプルにできる方法を考える
      • 内容が理解しやすければより正確なコードがかける
# if
 if <TestExpression>:
     <block> # Trueの時に評価するコード
 i=21 # 評価式がTrueであってもなくてもインデントされていない次の文が実行される

# or
 <Expression> or <Expression>
 # 1つ目の式がTrueの場合は2つ目は評価しない 
 # 1つ目がFalseの場合は2つ目の式の値になる
  • コード
  • a,bの値を比較し、値の大きい方を返す
def begger(a,b):
    if a > b:
        return a
    return b
 
# この書き方だと非対称なので、elseを使うと見やすくなる

def begger(a,b):
    if a > b:
        return a
    else:
        return b
  • 名前が"D"、"N"から始まる人にTrueを返す
def is_friend(name):
    if name[0] == "D":
        return True
    else name[0] == "N":
        return True
           else:
               retuen false

# orを使うとシンプルになる
def is_friend(name):
    return name[0] == "D" or name[0] == "N"
  • 3つの数字の中で一番大きい物を出力する
def biggest(a, b, c):
    if a > b: # aがb,cより大きい場合
        if a > c:
            return a
        else:
            return c
    if b > c: # bがa,cより大きい場合
        return b
    else: 
        return c

 # さっき作ったbiggerの関数を使うともっとシンプルになる

def biggest(a, b, c):
    return bigger(bigger(a,b),c)

# a,bの内大きいものとcを比較して大きい方を出力する
# 最後に行う動作を最初に考える
# 別の結果を入力に使うため
  • 進捗
    • Lesson2 23/30 完了

途中でコードを書く問題があるのですが、今回はちょっと時間がかかりました。 今回のレッスンまでのコードでプログラムはかけるそうです。 あとはいろんな構文ですっきりとしたコードをかけるように学習していきます。

キャンプに来ました

基本インドアですがたまには出掛けます。 今日は友人とキャンプに来ました。

千葉の南端です。

海が近くての気持ちいい。

ビールとテキーラを大分空けてしまいました。

今日udacity 見れるかな…。

コンピュータ・サイエンス入門7

7回目です。

  • 内容サマリ

    • 関数の合成:出力を入力として使うことができる
      • 合成し過ぎるとわかりづらいのでコードが理解できる程度にする
    • 比較演算子
      • 入力によって結果を変化させる
        • <, >, ==, != など
        • 値はTrue, Falseで返る
        • 代入を表す'='と同じ値を表す'=='は意味が全く違う
  • コード

  • 文章から2回めに登場する文字位置を探す
def find_second(search,target): # 変数名は機能がわかるように
    first = search.find(target)
    second = search.find(target,first+1)
    return second

danton = "De l'audace, encore de l'audace, toujours de l'audace"
print find_second(danton, 'audace')
  • もう少しシンプルにすると
def find_second(search,target):
    first = search.find(target)
    return = search.find(target,first+1)

danton = "De l'audace, encore de l'audace, toujours de l'audace"
print find_second(danton, 'audace')
  • もっとシンプルに
def find_second(search,target):
    return = search.find(target,search.find(target)+1)

# ただしこれだと内容がわかりずらいので2個めのコードくらいがよい
  • 進捗
    • Lesson2:17/41完了

今日はあまり進みませんでした。
明日は出かける用があるのですが、スマホで勉強できるよう頑張ろう。

コンピュータ・サイエンス入門6

Lessuon2に入りました。

  • 内容サマリ
    • Lesson2概要:Webクローラ作成の作成
      • 関数の学習 プログラム再利用
      • 制御の学習 繰り返し
    • 関数について
      • プログラムをまとめ再利用する
        • 入力に処理を与え出力する
        • Input -> 関数 -> Output
      • def(define)を使用して作成する
      • 関数内はreturnで値を返す
        • printは値を表示するのみで出力ではない
 # 関数の書き方
 def <name>(<parameters>):
     <block> # インデントは必須
  
 # 関数の使い方
 <procedure>(<input>,<input>)
  • コード
    • Webページ内は複数リンクがあるものもあるためリンクの出力を関数化する
    • ※コードを学習内のものに修正
 def get_next_target(s): # pageに限らずあらゆる文字列をコードが見つけるため一般的な値(s)とする
     start_link = s.find('<a href=')
     start_quote = s.find('"',start_link)
     end_quote = s.find('"',start_link+1)
     url = s[start_link+1:end_quote]
     return url,end_quote # urlとend_quoteの値が戻る。end_quoteは次のリンク抽出のため使用する
  • 関数を使う
 def rest_of_string(s):
     return s[1:]

 print rest_of_string('audacity') # input内の1文字目以降が表示される'udacity'
 # 関数内でreturnしておかないと値が出力されず空で表示される
  • 進捗
    • Lesson1:完了
    • Lesson2: 11/30完了

関数の作成に入りました。 この辺がプログラム作成って感じです。 Markdownでコードを挿入するとリストがうまく表示されない・・・。 はてなBlogだけ?