2010-11-18

Force.com : データを import/export したい - Force.com Excel Connector

 
データを import/export したい - Force.com Excel Connector



◆ 前提

  1. 必要なら Office Toolkit をダウンロードして、インストールしておく
  2. Force.com Excel Connector をダウンロードして、適当なところに展開しておく
  3. Force.com Excel Connector のアドオンの設定をしてみる
    1. Excel を起動する
    2. [ツール]→[アドオン]→[参照]ボタン押下
    3. 先に展開した sforce_connect_XXX.xla みたいなファイルを読み込む
    4. 読み込んだアドオンをチェックして[OK]ボタン押下



◆ ログイン・ログアウト・確認

■ ログイン
  1. [sforce Connector]→[(処理したい操作)]押下
  2. 入力項目を設定→[Login]押下
    • User Name : 接続先のユーザ名
    • Password : 接続先のユーザのパスワード(+セキュリティトークン)


■ ログアウト
  1. [sforce Connector]→[Logout Session]押下


■ 確認
  1. [sforce Connector]→[Logout Session]の下にログイン中のユーザ名が表示される



◆ データの取得

  1. [sforce Connector]→[Sforce Table Query Wizard]押下
  2. [Sforce Table Query Wizard - Step 1 of 3]
    1. データ表示開始位置を指定→[Next]ボタン押下
  3. [Sforce Table Query Wizard - Step 2 of 3]
    1. 取得するオブジェクトを選択→[Next]ボタン押下
    2. 取得するフィールドを選択→[Next]ボタン押下
  4. [Sforce Table Query Wizard - Step 3 of 3]
    1. 取得条件がある場合は、条件を設定して[Add to Query]ボタン押下で条件追加
    2. [Run Query]ボタン押下
日付は最後に「T09:00:00Z」を書かないとずれるぽい。



◆ データの追加

■ ex. 取引先(Account)
  1. Account のヘッダを取得する
    1. [sforce Connector]→[Sforce Table Query Wizard]押下
    2. [Step 1 of 3][$A$1]を指定→[Next]ボタン押下
    3. [Step 2 of 3][Account]を選択→[Next]ボタン押下
    4. [Step 2 of 3][取引先ID][取引先名]を選択→[Next]ボタン押下
    5. [Step 3 of 3][Cancel]ボタン押下
  2. 新規データを作成する
    AB
    1Account
    2取引先ID取引先名
    3New
    4New
    5New

    ※ A2 のコメント
    Primary Object Identifier
    API Name: Id
    Type: id
    
    ※ B2 のコメント
    Required on Insert
    API Name: Name
    Type: string
    
    説明
    • A1 : オブジェクトの API 参照名
    • A2:B2 : オブジェクトの項目名、他
    • A3:B5 : 新規データ
  3. 追加するデータ(上記の場合は[A3:A5]な感じ)を選択→[sforce Connector]→[Insert Selected Rows]押下
  4. 「Account に 3 件レコードを追加する?」なダイアログが表示されるので[OK]ボタン押下
  5. 結果が Excel に反映される
    • OK : [取引先ID]が追加したデータのIDに変更される
    • NG : [取引先ID]のセルの色が変わる。コメントでエラー内容が表示される
[所有者]の項目を指定しない場合にはログインしているユーザの ID が設定された。
項目のコメントに「Read Only Field」が書かれてあるものは勝手に値が設定された。
結果が NG のときにダイアログボックスでエラーメッセージが表示されるのもあった ... 気がする。



◆ データの更新

■ ex. 取引先(Account)
  1. Account のデータを取得する
  2. データを更新する
    ABC
    1Account
    2取引先ID取引先名取引先 電話
    3001A000000ScdgkIAB0120-000000
    4001A000000Scdg4IAB
    5001A000000ScdglIAB
  3. 更新するセル(上記の場合は[C3])を選択→[sforce Connector]→[Update Selected Cells]押下
  4. 「Account に 1 件 レコードを更新する?」なダイアログが表示されるので[OK]ボタン押下
  5. 結果が Excel に反映される
    • OK : (特になし?)
    • NG : 選択した箇所のセルの色が変わる。コメントでエラー内容が表示される



◆ データの更新

■ ex. 取引先(Account)
  1. Account のデータを取得する
  2. 削除するデータの行を選択→[sforce Connector]→[Delete Object]押下
  3. [取引先ID]が「Deleted」に変わる
削除後は、ごみ箱にいた。



◇ その他


しかし、結構古いなぁ。
Sandbox への接続の仕方がわからなかった。
(ので、最後は Force.com Data Loader 使ってた)



◇ 環境

  • Office Toolkit 3.0
  • Office Excel 2003
  • Force.com Excel Connector Version 6.16pe
  • Force.com Developer Edition / Force.com Enterprise Edition



◇ 参考

 

2010-11-16

Force.com : デプロイがしたい - Force.com IDE (Eclipse Plugin)

 
デプロイがしたい - Force.com IDE (Eclipse Plugin)



◆ 前提

  • ローカルにデプロイ元のプロジェクトを取得していること、とか



◆ デプロイ方法

  1. Eclipse を起動
  2. デプロイしたいプロジェクトを右クリック→[Force.com]→[Deploy to Server]
    (ローカルのプロジェクトとデプロイ元とで同期が取られる)
  3. [Destination Details (Step 1 of 4)]
    入力項目を設定→[Next]ボタン押下
    • Username : デプロイ先のユーザ名
    • Password : デプロイ先のユーザのパスワード
    • Security Token : デプロイ先のユーザのセキュリティートークン(※)
    • Environment : デプロイ先の環境
  4. [Archive Options (Step 2 of 4)]
    アーカイブを作成するディレクトリを設定→[Next]ボタン押下
    • Project archive : プロジェクトのアーカイブ作成
    • Deatination archive : デプロイ先のアーカイブ作成
  5. [Deployment Plan (Step 3 of 4)]
    デプロイするファイルを選択→[Next]ボタン押下
    • Validate Deployment : デプロイの検証
  6. [Deployment Result (Step 4 of 4)]
    デプロイ結果を確認→[Finish]
    • View Logs : デプロイのログを表示



※ セキュリティートークンの発行

  1. salesforce.com にログイン
  2. [設定]→[個人設定]→[私の個人情報]→[私のセキュリティトークンのリセット]→[セキュリティトークンのリセット]ボタン押下
  3. 設定しているメールアドレスに新しいセキュリティトークンが送信される



まぁ。 クラスとかトリガーだけならいいけど、 まるっと移すとなると一旦移し終わった後で、 手動でぽちぽち設定をしていたりもする ... 。



◇ 環境

  • Java SE 6u22
  • Eclipse IDE for Java Developers Version: Helios Service Release 1
 

2010-11-06

Force.com : Apex でスケジュールを使って処理を実行したい

 
Apex でスケジュールを使って処理を実行したい
  • どっかに「hello, world」とか出力する
  • 1 時間毎に出力する



◆ クラス

■ 処理を実行するクラス
// 処理を実行するクラス
public class HelloWorld {
    // 処理
    public static void print() {
        System.debug('***** hello, world');
    }
}


■ スケジュールを実行するクラス
// スケジュールを実行するクラス
global class ScheduledHelloWorld implements Schedulable {
    // 処理
    global void execute(SchedulableContext sc) {

        System.debug('***** INFO  *****');
        CronTrigger ct = [SELECT id, CronExpression, StartTime, EndTime, NextFireTime, PreviousFireTime, TimeZoneSidKey FROM CronTrigger WHERE id = :sc.getTriggerId()];
        System.debug('***** ジョブID : ' + ct.id);
        System.debug('***** cron 式 : ' + ct.CronExpression);
        System.debug('***** スケジュール開始日時 : ' + ct.StartTime);
        System.debug('***** スケジュール終了日時 : ' + ct.EndTime);
        System.debug('***** 次のジョブの開始日時 : ' + ct.NextFireTime);    // null の場合、次回予定なし
        System.debug('***** 最新のジョブ終了日時 : ' + ct.PreviousFireTime);    // null の場合、未実行
        System.debug('***** タイムゾーン : ' + ct.TimeZoneSidKey);

        System.debug('***** START ***** ');
        HelloWorld.print();
        System.debug('***** E N D ***** ');
    }

    // テスト
    static testMethod void testScheduledHelloWold() {
        Test.startTest();
        String jobId = System.schedule('test hello world','0 0 * * * ?', new ScheduledHelloWorld());
        System.debug('***** job id : ' + jobId + ' ***** ***** *****');
        Test.stopTest();
    }
}
スケジュールを登録するためには Schedulable インタフェースを実装しないといけないらしい。
Schedulable インタフェースは execute メソッドを実装しないといけないらしい。

[開発]→[Apex クラス]→[ScheduledHelloWorld]→[テストを実行]ボタン押下でテストが可能。
指定した実行時間まで待たずに、テストは開始される。


■ スケジュールを登録するクラス
// スケジュールを登録するクラス
global class HelloWorldScheduler {
    // スケジュール開始
    public static void start() {
        String jobId = System.schedule('hello world','0 0 * * * ?', new ScheduledHelloWorld());
        System.debug('***** job id : ' + jobId + ' ***** ***** *****');
    }
}
  • System.schedule(String JobName, String CronExpression, Object schedulable_class) とは
    • 引数・String JobName : ジョブ名
    • 引数・String CronExpression : スケジュールの実行時間指定(cron 形式)
      • 形式 : Seconds Minutes Hours Day_of_month Month Day_of_week optional_year
      • ex. 毎時間 0 分 0 秒 : '0 0 * * * ?'
      • ex. 毎月 末日 22 時 : '0 0 22 L * ?'
    • 引数・Object schedulable_class : Schedulable インタフェースを実装したクラスのインスタンス
    • 戻り値・String JobId : ジョブID



◆ スケジュールの登録 1

  1. [設定]→[開発]→[Apex クラス]→[Apex をスケジュール]ボタン押下
  2. 項目を設定
    • ジョブ名 : hellow world (任意の名前)
    • Apex クラス : ScheduledHelloWorld (Schedulable インタフェースを実装したクラス)
    • Apex の実行をスケジュール : (略)
  3. [保存]ボタン押下
画面からだと、スケジュールは最低一日一回からぽい。(実装した場合は最低一時間一回からっぽい。)
あと、スケジュールの実行期間(開始、終了)とか設定しないといけないぽい。



◆ スケジュールの登録 2

  1. [システムログ]リンク押下
  2. [System Log]画面の[Execute Apex]に実行するメソッドを入力
    • HelloWorldScheduler.start();
  3. [実行]ボタン押下
新しい[System Log]画面なんて知らない。
そのまま[System Log]画面を開いていると、スケジュールが実行されたときに[Logs]にログリストがつらつらとか。



◆ スケジュールの確認

  1. [設定]→[監視]→[スケジュール済みジョブ]から確認



◆ スケジュールの削除

  1. [設定]→[監視]→[スケジュール済みジョブ]から削除するジョブの[アクション/削除]リンク押下



◇ 参考

 

2010-03-16

racoon の IKE 設定用ファイル(racoon.conf)について

 
* めためた

  • number : means a hexadecimal or a decimal number. The former must be prefixed with `0x'.
  • string
  • path
  • file : means any string enclosed in `"' (double quotes).
  • address : means IPv6 and/or IPv4 address.
  • port : means a TCP/UDP port number. The port number is always enclosed by `[' and `]'.
  • timeunit : is one of following: sec, secs, second, seconds, min, mins, minute, minutes, hour, hours.



* パスの仕様

  • path include path;
    他の設定ファイルをインクルードする
  • path pre_shared_key file;
    事前共有鍵のファイルを指定する
  • path certificate path;
    証明書と秘密鍵のパスを指定する



* フェーズ 1

  • remote (address | anonymous) [[port]] { ... }
    IKE フェーズ 1 を設定する
    • default port : 500

** フェーズ 1 -> remote パラメータの設定
  • exchange_mode (main | agressive | base);
    認証モードを指定する(カンマ区切りで複数指定が可能)
    • main : ID を保護 (ID に address しか使えなくなる)
    • aggressive :
    • base :
  • lifetime time number timeunit;
    ISAKMP SA (IKE SA)の有効時間
  • passive (on | off);
    ネゴシエートしない
    (※ サーバ用に便利)
    • default : off
  • generate_policy (on | off);
    ポリシーの自動生成をする
    (※ IPアドレスが動的に割り当てられているクライアントとネゴシエートするのに便利)
    • default : off
  • nat_traversal (on | off | force);
    NAT-Traversal を利用する
    • default : off
    • on :
    • off :
    • force :
  • ike_frag (on | off | force);
    IKE フラグメンテーションを利用する
    • default : off
  • esp_frag fraglen;
    ESP フラグメンテーションを利用する
    トンネルモードで NAT-Traversal を利用するときのみ有効
  • proposal { ... }
    IKE-SA のパラメータを設定する

*** フェーズ 1 -> remote パラメータ -> IKE-SA のパラメータの設定
  • encryption_algorithm algorithm;
    暗号化アルゴリズム
    • algorithm : des, 3des, blowfish, cast128, aes, camellia
  • hash_algorithm algorithm;
    ハッシュアルゴリズム
    • algorithm : md5, sha1, sha256, sha384, sha512
  • authentication_method type;
    認証方式
    • type : pre_shared_key, rsasig (for plain RSA authentication), gssapi_krb, hybrid_rsa_server, hybrid_rsa_client, xauth_rsa_server, xauth_rsa_client, xauth_psk_server, xauth_psk_client
  • dh_group group;
    Diffie-Hellman グループ
    • group : modp768, modp1024, modp1536, modp2048, modp3072, modp4096, modp6144, modp8192 or 1, 2, 5, 14, 15, 16, 17, 18



* フェーズ 2

  • sainfo (source_id destination_id | anonymous) [from idtype [string]] { ... }
    IKE フェーズ 2(IPsec-SA 確立) を設定する

** フェーズ 2 -> sainfo パラメータの設定
  • pfs_group group;
    Diffie-Hellman グループ
    • group : modp768, modp1024, modp1536, modp2048, modp3072, modp4096, modp6144, modp8192 or 1, 2, 5, 14, 15, 16, 17, 18
  • lifetime time number timeunit;
    IPsec SA の有効時間
  • encryption_algorithm algorithms;
    暗号化アルゴリズム
    • des, 3des, des_iv64, des_iv32, rc5, rc4, idea, 3idea, cast128, blowfish, null_enc, twofish, rijndael, aes, camellia (used with ESP)
  • authentication_algorithm algorithms;
    認証アルゴリズム
    • des, 3des, des_iv64, des_iv32, hmac_md5, hmac_sha1, hmac_sha256, hmac_sha384, hmac_sha512, non_auth (used with ESP authentication and AH)
  • compression_algorithm algorithms;
    圧縮アルゴリズム
    • dflate




* 詳細

man racoon.conf

もしくは




* 環境

CentOS release 5.4 (Final) + kernel 2.6.18
ipsec-tools 0.6.5
 

racoon の起動・初期化・確認の方法

 
* 起動


setkey [-f $SPD 設定ファイル]
racoon [-F] [-f $IKE 設定ファイル]




* 初期化


** SAD の初期化

setkey -F


** SPD の初期化

setkey -FP




** 確認


** SAD の表示

setkey -D

ip xfrm state


** SPD の表示

setkey -DP

ip xfrm policy




* 環境

CentOS release 5.4 (Final) + kernel 2.6.18
ipsec-tools 0.6.5
 

racoon のセキュリティポリシー設定ファイル(ipsec.conf)について

 
flush;
SAD の初期化(setkey -F と同等)


spdflush;
SPD の初期化(setkey -FP と同等)


spdadd src_range dst_range upperspec policy;
SPD の追加
  • src_range
    ローカルの IP アドレス
    書式
    • address
    • address/prefixlen
    • address[port]
    • address/prefixlen[port]
  • dst_range
    リモートの IP アドレス
    書式は src_range と同様
  • upperspec
    /etc/protocols のプロトコル | any
  • policy
    -P direction (discard | none | ipsec) protocol/mode/src-dst/level [...]
    • direction
      in | out | fwd
    • protocol
      ah | esp | ipcomp
    • mode
      transport | tunnel
    • src-dst
      mode : tunnnel の場合のみ指定可能
    • level
      default | use | require | unique




ex. ipsec.conf

  • xxx.xxx.xxx.xxx -> yyy.yyy.yyy.yyy
  • プロトコル : esp
  • 接続方法 : transport
flush;
spdflush;

spdadd xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy any -P out ipsec esp/transport//require;
spdadd yyy.yyy.yyy.yyy xxx.xxx.xxx.xxx any -P in ipsec esp/transport//require;




* 詳細

man setkey

または




* 環境

CentOS release 5.4 (Final) + kernel 2.6.18
ipsec-tools 0.6.5
 

実装 : 事前共有鍵認証 トランスポートモード(esp + nat-t)

 
◆ 構成


              ┌────┴────┐
              │                  │ 
 192.168.0.1┌┴┐         [NAT]┌┴┐1.1.1.1
            │ │              └┬┘
            └┬┘                │
              │                ┌┴┐10.0.0.1
                                │ │
                                └┬┘
                                  │



◆ 192.168.0.1 の設定


# IEK 設定用ファイルの設定
#vi /home/racoon/sample1/racoon.conf
-----
path include  "/usr/local/sbin/racoon";
path pre_shared_key "/home/racoon/sample1/psk.txt";
log notify;
listen {
  isakmp 192.168.0.1 [500];
  isakmp_natt 192.168.0.1 [4500];
}
remote anonymous {
  exchange_mode aggressive;
  lifetime time 8 hour;
  nat_traversal force;
  generate_policy on;
  passive on;
  proposal {
    encryption_algorithm aes;
    hash_algorithm sha1;
    authentication_method pre_shared_key;
    dh_group 2;
  }
}
sainfo anonymous {
  pfs_group 2;
  lifetime time 8 hour;
  encryption_algorithm aes;
  authentication_algorithm hmac_sha1;
  compression_algorithm deflate;
}
-----


# セキュリティポリシー設定ファイルの設定
#vi /home/racoon/sample1/ipsec.conf
-----
flush;
spdflush;

spdadd 192.168.0.1 1.1.1.1 any -P out ipsec esp/transport//require;
spdadd 1.1.1.1 192.168.0.1 any -P in ipsec esp/transport//require;
-----


# 事前共有鍵の設定
#vi /home/racoon/sample1/psk.txt
-----
1.1.1.1 abcdefg1234567890
-----
#chmod 0400 /home/racoon/sample1/psk.txt


# iptables の設定
#iptables -A INPUT -s 1.1.1.1 -p esp -j ACCEPT
#iptables -A INPUT -s 1.1.1.1 -p udp -m udp --dport 500 -j ACCEPT
#iptables -A INPUT -s 1.1.1.1 -p udp -m udp --dport 4500 -j ACCEPT
※ その他諸々いるかもしれない



◆ 10.0.0.1 の設定


# IEK 設定用ファイルの設定
#vi /home/racoon/sample1/racoon.conf
-----
path include  "/usr/local/sbin/racoon";
path pre_shared_key "/home/racoon/sample1/psk.txt";
log notify;
listen {
  isakmp 10.0.0.1 [500];
  isakmp_natt 10.0.0.1 [4500];
}
remote 192.168.0.1 {
  exchange_mode aggressive;
  lifetime time 8 hour;
  nat_traversal force;
  generate_policy on;
  proposal {
    encryption_algorithm aes;
    hash_algorithm sha1;
    authentication_method pre_shared_key;
    dh_group 2;
  }
}
sainfo anonymous {
  pfs_group 2;
  lifetime time 8 hour;
  encryption_algorithm aes;
  authentication_algorithm hmac_sha1;
  compression_algorithm deflate;
}
-----


# セキュリティポリシー設定ファイルの設定
#vi /home/racoon/sample1/ipsec.conf
-----
flush;
spdflush;

spdadd 10.0.0.1 192.168.0.1 any -P out ipsec esp/transport//require;
spdadd 192.168.0.1 10.0.0.1 any -P in ipsec esp/transport//require;
-----


# 事前共有鍵の設定
#vi /home/racoon/sample1/psk.txt
-----
192.168.0.1 abcdefg1234567890
-----
#chmod 0400 /home/racoon/sample1/psk.txt



◆ 実行

/usr/local/sbin/setkey -F
/usr/local/sbin/setkey -FP
/usr/local/sbin/setkey -f /home/racoon/sample1/ipsec.conf
/usr/local/sbin/racoon -f /home/racoon/sample1/racoon.conf



◆ 接続


# 10.0.0.1
#ping 192.168.0.1


# 192.168.0.1 - log
INFO: respond new phase 1 negotiation: 192.168.0.1[500]<=>1.1.1.1[500]
INFO: begin Aggressive mode.
INFO: received broken Microsoft ID: FRAGMENTATION
INFO: received Vendor ID: RFC 3947
INFO: received Vendor ID: draft-ietf-ipsec-nat-t-ike-02
INFO: received Vendor ID: draft-ietf-ipsec-nat-t-ike-02
INFO: received Vendor ID: draft-ietf-ipsec-nat-t-ike-00
INFO: received Vendor ID: DPD
INFO: Selected NAT-T version: RFC 3947
NOTIFY: couldn't find the proper pskey, try to get one by the peer's address.
INFO: Adding remote and local NAT-D payloads.
INFO: Hashing 1.1.1.1[500] with algo #2 (NAT-T forced)
INFO: Hashing 192.168.0.1[500] with algo #2 (NAT-T forced)
INFO: NAT-T: ports changed to: 1.1.1.1[4500]<->192.168.0.1[4500]
INFO: NAT-D payload #0 doesn't match
INFO: NAT-D payload #1 doesn't match
INFO: NAT detected: ME PEER
INFO: ISAKMP-SA established 192.168.0.1[4500]-1.1.1.1[4500] spi:fe0819ec74a31b8d:e84869765f89625a
INFO: respond new phase 2 negotiation: 192.168.0.1[4500]<=>1.1.1.1[4500]
INFO: no policy found, try to generate the policy : 10.0.0.1/32[0] 192.168.0.1/32[0] proto=any dir=in
INFO: Adjusting my encmode UDP-Transport->Transport
INFO: Adjusting peer's encmode UDP-Transport(4)->Transport(2)
INFO: IPsec-SA established: ESP/Transport 1.1.1.1[4500]->192.168.0.1[4500] spi=62640834(0x3bbd2c2)
INFO: IPsec-SA established: ESP/Transport 192.168.0.1[4500]->1.1.1.1[4500] spi=213371505(0xcb7ca71)
ERROR: such policy does not already exist: "10.0.0.1/32[0] 192.168.0.1/32[0] proto=any dir=in"
ERROR: such policy does not already exist: "192.168.0.1/32[0] 10.0.0.1/32[0] proto=any dir=out"
※ 最後に ERROR が出ているけれども SPD の自動生成は行われたよう



◇ 環境


CentOS release 5.4 (Final) + kernel 2.6.18
ipsec-tools 0.6.5



◇ その他


racoon.conf
  • nat_traversal を force に設定しているけれども on で十分な気がする(ログが force に設定したときのログ)
  • generate_policy を on にすると登録されていない SPD でも接続できてしまう。ので、NAT 配下の IP アドレスがわかるなら先に SPD を追加したい
  • てか、 NAT 配下に 2 台以上あると generate_policy では無理だと思う
 

2010-03-15

実装 : 事前共有鍵認証 トンネルモード (ipcomp + esp)

 
◆ 構成


             ┌────────┐
 192.168.0.1 │                │ 192.168.0.2
           ┌┴┐            ┌┴┐
           │ │============│ │
           └┬┘            └┬┘
             │                │



◆ 192.168.0.1 の設定


# IEK 設定用ファイルの設定
#vi /home/racoon/sample1/racoon.conf
-----
path include  "/usr/local/sbin/racoon";
path pre_shared_key "/home/racoon/sample1/psk.txt";
log notify;
listen {
  isakmp 192.168.0.1 [500];
}
remote anonymous {
  exchange_mode aggressive;
  lifetime time 8 hour;
  passive on;
  proposal {
    encryption_algorithm aes;
    hash_algorithm sha1;
    authentication_method pre_shared_key;
    dh_group 2;
  }
}
sainfo anonymous {
  pfs_group 2;
  lifetime time 8 hour;
  encryption_algorithm aes;
  authentication_algorithm hmac_sha1;
  compression_algorithm deflate;
}
-----


# セキュリティポリシー設定ファイルの設定
#vi /home/racoon/sample1/ipsec.conf
-----
flush;
spdflush;

spdadd 192.168.0.1 192.168.0.2 any -P out ipsec ipcomp/tunnel/192.168.0.1-192.168.0.2/use esp/tunnel/192.168.0.1-192.168.0.2/require;
spdadd 192.168.0.2 192.168.0.1 any -P in ipsec ipcomp/tunnel/192.168.0.2-192.168.0.1/use esp/tunnel/192.168.0.2-192.168.0.1/require;
-----


# 事前共有鍵の設定
#vi /home/racoon/sample1/psk.txt
-----
192.168.0.2 abcdefg1234567890
-----
#chmod 0400 /home/racoon/sample1/psk.txt


# iptables の設定
#iptables -A INPUT -s 192.168.0.2 -p esp -j ACCEPT
#iptables -A INPUT -s 192.168.0.2 -p udp -m udp --dport 500 -j ACCEPT
※ その他諸々いるかもしれない



◆ 192.168.0.2 の設定


# IEK 設定用ファイルの設定
#vi /home/racoon/sample1/racoon.conf
-----
path include  "/usr/local/sbin/racoon";
path pre_shared_key "/home/racoon/sample1/psk.txt";
log notify;
listen {
  isakmp 192.168.0.2 [500];
}
remote 192.168.0.1 {
  exchange_mode aggressive;
  lifetime time 8 hour;
  proposal {
    encryption_algorithm aes;
    hash_algorithm sha1;
    authentication_method pre_shared_key;
    dh_group 2;
  }
}
sainfo anonymous {
  pfs_group 2;
  lifetime time 8 hour;
  encryption_algorithm aes;
  authentication_algorithm hmac_sha1;
  compression_algorithm deflate;
}
-----


# セキュリティポリシー設定ファイルの設定
#vi /home/racoon/sample1/ipsec.conf
-----
flush;
spdflush;

spdadd 192.168.0.2 192.168.0.1 any -P out ipsec ipcomp/tunnel/192.168.0.2-192.168.0.1/use esp/tunnel/192.168.0.2-192.168.0.1/require;
spdadd 192.168.0.1 192.168.0.2 any -P in ipsec ipcomp/tunnel/192.168.0.1-192.168.0.2/use esp/tunnel/192.168.0.1-192.168.0.2/require;
-----


# 事前共有鍵の設定
#vi /home/racoon/sample1/psk.txt
-----
192.168.0.1 abcdefg1234567890
-----
#chmod 0400 /home/racoon/sample1/psk.txt



◆ 実行


/usr/local/sbin/setkey -F
/usr/local/sbin/setkey -FP
/usr/local/sbin/setkey -f /home/racoon/sample1/ipsec.conf
/usr/local/sbin/racoon -f /home/racoon/sample1/racoon.conf



◆ 接続


# 192.168.0.2
#ping 192.168.0.1


# 192.168.0.1 - log
-----

※ log 未取得
※ ipsec-tools のバージョンを 0.6.5 から 0.7.2 にあげてみたら log モードの出力のされ方かわった?


◇ 環境


Fedora release 11 (Leonidas) + kernel 2.6.29
ipsec-tools 0.7.2



◇ その他 - 1


CentOS release 5.4 (Final) + kernel 2.6.18
ipsec-tools 0.6.5 or ipsec-tools 0.7.2

だと、IPCOMP/Tunnel が最終的には確立できずに無理だった。

#/usr/local/sbin/setkey -c
add 192.168.0.1 192.168.0.2 ipcomp 0x1001 -m tunnel -C deflate;
Invalid argument.
add 192.168.0.2 192.168.0.1 ipcomp 0x1002 -m tunnel -C deflate;
Invalid argument.

手動で SAD を登録しようとしたら「引数が無効」とな。
kernal の問題かとか思いながら、もういい。



◇ その他 - 2


なので、kernel のバージョンあげて実行すべく、Fedora へ。

Fedora release 10 (Cambridge) + kernel 2.6.27
ipsec-tools 0.8-alpha20090903

だと、なんかエラー出た。

#/usr/local/sbin/setkey -f /home/racoon/sample1/ipsec.conf
setkey: invalid keymsg length
setkey: invalid keymsg length

SPD の「protocol/mode/src-dst/level」な箇所が複数記述できないやう。
ぐぐったら kernel bug とか引っかかったので、もういい。
 

実装 : 事前共有鍵認証 トンネルモード(esp)

 
◆ 構成


             ┌────────┐
 192.168.0.1 │                │ 192.168.0.2
           ┌┴┐            ┌┴┐
           │ │============│ │
           └┬┘            └┬┘
             │                │



◆ 192.168.0.1 の設定


# IEK 設定用ファイルの設定
#vi /home/racoon/sample1/racoon.conf
-----
path include  "/usr/local/sbin/racoon";
path pre_shared_key "/home/racoon/sample1/psk.txt";
log notify;
listen {
  isakmp 192.168.0.1 [500];
}
remote anonymous {
  exchange_mode aggressive;
  lifetime time 8 hour;
  passive on;
  proposal {
    encryption_algorithm aes;
    hash_algorithm sha1;
    authentication_method pre_shared_key;
    dh_group 2;
  }
}
sainfo anonymous {
  pfs_group 2;
  lifetime time 8 hour;
  encryption_algorithm aes;
  authentication_algorithm hmac_sha1;
  compression_algorithm deflate;
}
-----


# セキュリティポリシー設定ファイルの設定
#vi /home/racoon/sample1/ipsec.conf
-----
flush;
spdflush;

spdadd 192.168.0.1 192.168.0.2 any -P out ipsec esp/tunnel/192.168.0.1-192.168.0.2/require;
spdadd 192.168.0.2 192.168.0.1 any -P in ipsec esp/tunnel/192.168.0.2-192.168.0.1/require;
-----


# 事前共有鍵の設定
#vi /home/racoon/sample1/psk.txt
-----
192.168.0.2 abcdefg1234567890
-----
#chmod 0400 /home/racoon/sample1/psk.txt


# iptables の設定
#iptables -A INPUT -s 192.168.0.2 -p esp -j ACCEPT
#iptables -A INPUT -s 192.168.0.2 -p udp -m udp --dport 500 -j ACCEPT
※ その他諸々いるかもしれない



◆ 192.168.0.2 の設定


# IEK 設定用ファイルの設定
#vi /home/racoon/sample1/racoon.conf
-----
path include  "/usr/local/sbin/racoon";
path pre_shared_key "/home/racoon/sample1/psk.txt";
log notify;
listen {
  isakmp 192.168.0.2 [500];
}
remote 192.168.0.1 {
  exchange_mode aggressive;
  lifetime time 8 hour;
  proposal {
    encryption_algorithm aes;
    hash_algorithm sha1;
    authentication_method pre_shared_key;
    dh_group 2;
  }
}
sainfo anonymous {
  pfs_group 2;
  lifetime time 8 hour;
  encryption_algorithm aes;
  authentication_algorithm hmac_sha1;
  compression_algorithm deflate;
}
-----


# セキュリティポリシー設定ファイルの設定
#vi /home/racoon/sample1/ipsec.conf
-----
flush;
spdflush;

spdadd 192.168.0.2 192.168.0.1 any -P out ipsec esp/tunnel/192.168.0.2-192.168.0.1/require;
spdadd 192.168.0.1 192.168.0.2 any -P in ipsec esp/tunnel/192.168.0.1-192.168.0.2/require;
-----


# 事前共有鍵の設定
#vi /home/racoon/sample1/psk.txt
-----
192.168.0.1 abcdefg1234567890
-----
#chmod 0400 /home/racoon/sample1/psk.txt



◆ 実行


/usr/local/sbin/setkey -F
/usr/local/sbin/setkey -FP
/usr/local/sbin/setkey -f /home/racoon/sample1/ipsec.conf
/usr/local/sbin/racoon -f /home/racoon/sample1/racoon.conf



◆ 接続


# 192.168.0.2
#ping 192.168.0.1


# 192.168.0.1 - log
INFO: respond new phase 1 negotiation: 192.168.0.1[500]<=>192.168.0.2[500]
INFO: begin Aggressive mode.
INFO: received Vendor ID: DPD
NOTIFY: couldn't find the proper pskey, try to get one by the peer's address.
INFO: ISAKMP-SA established 192.168.0.1[500]-192.168.0.2[500] spi:b426a0c6d8d77478:0175a0c2f99a39e2
INFO: respond new phase 2 negotiation: 192.168.0.1[500]<=>192.168.0.2[500]
INFO: IPsec-SA established: ESP/Tunnel 192.168.0.2[500]->192.168.0.1[500] spi=171417387(0xa379f2b)
INFO: IPsec-SA established: ESP/Tunnel 192.168.0.1[500]->192.168.0.2[500] spi=193833491(0xb8daa13)



◇ 環境


CentOS release 5.4 (Final) + kernel 2.6.18
ipsec-tools 0.6.5
 

実装 : 事前共有鍵認証 トランスポートモード(ipcomp + esp)

 
◆ 構成


             ┌────────┐
 192.168.0.1 │                │ 192.168.0.2
           ┌┴┐            ┌┴┐
           │ │            │ │
           └┬┘            └┬┘
             │                │



◆ 192.168.0.1 の設定


# IEK 設定用ファイルの設定
#vi /home/racoon/sample1/racoon.conf
-----
path include  "/usr/local/sbin/racoon";
path pre_shared_key "/home/racoon/sample1/psk.txt";
log notify;
listen {
  isakmp 192.168.0.1 [500];
}
remote anonymous {
  exchange_mode aggressive;
  lifetime time 8 hour;
  passive on;
  proposal {
    encryption_algorithm aes;
    hash_algorithm sha1;
    authentication_method pre_shared_key;
    dh_group 2;
  }
}
sainfo anonymous {
  pfs_group 2;
  lifetime time 8 hour;
  encryption_algorithm aes;
  authentication_algorithm hmac_sha1;
  compression_algorithm deflate;
}
-----


# セキュリティポリシー設定ファイルの設定
#vi /home/racoon/sample1/ipsec.conf
-----
flush;
spdflush;

spdadd 192.168.0.1 192.168.0.2 any -P out ipsec ipcomp/transport//use esp/transport//require;
spdadd 192.168.0.2 192.168.0.1 any -P in ipsec ipcomp/transport//use esp/transport//require;
-----


# 事前共有鍵の設定
#vi /home/racoon/sample1/psk.txt
-----
192.168.0.2 abcdefg1234567890
-----
#chmod 0400 /home/racoon/sample1/psk.txt


# iptables の設定
#iptables -A INPUT -s 192.168.0.2 -p esp -j ACCEPT
#iptables -A INPUT -s 192.168.0.2 -p udp -m udp --dport 500 -j ACCEPT
※ その他諸々いるかもしれない



◆ 192.168.0.2 の設定


# IEK 設定用ファイルの設定
#vi /home/racoon/sample1/racoon.conf
-----
path include  "/usr/local/sbin/racoon";
path pre_shared_key "/home/racoon/sample1/psk.txt";
log notify;
listen {
  isakmp 192.168.0.2 [500];
}
remote 192.168.0.1 {
  exchange_mode aggressive;
  lifetime time 8 hour;
  proposal {
    encryption_algorithm aes;
    hash_algorithm sha1;
    authentication_method pre_shared_key;
    dh_group 2;
  }
}
sainfo anonymous {
  pfs_group 2;
  lifetime time 8 hour;
  encryption_algorithm aes;
  authentication_algorithm hmac_sha1;
  compression_algorithm deflate;
}
-----


# セキュリティポリシー設定ファイルの設定
#vi /home/racoon/sample1/ipsec.conf
-----
flush;
spdflush;

spdadd 192.168.0.2 192.168.0.1 any -P out ipsec ipcomp/transport//use esp/transport//require;
spdadd 192.168.0.1 192.168.0.2 any -P in ipsec ipcomp/transport//use esp/transport//require;
-----


# 事前共有鍵の設定
#vi /home/racoon/sample1/psk.txt
-----
192.168.0.1 abcdefg1234567890
-----
#chmod 0400 /home/racoon/sample1/psk.txt



◆ 実行


/usr/local/sbin/setkey -F
/usr/local/sbin/setkey -FP
/usr/local/sbin/setkey -f /home/racoon/sample1/ipsec.conf
/usr/local/sbin/racoon -f /home/racoon/sample1/racoon.conf



◆ 接続


# 192.168.0.2
#ping 192.168.0.1


# 192.168.0.1 - log
INFO: respond new phase 1 negotiation: 192.168.0.1[500]<=>192.168.0.2[500]
INFO: begin Aggressive mode.
INFO: received Vendor ID: RFC 3947
INFO: received Vendor ID: draft-ietf-ipsec-nat-t-ike-02
INFO: received Vendor ID: draft-ietf-ipsec-nat-t-ike-02
INFO: received Vendor ID: draft-ietf-ipsec-nat-t-ike-00
INFO: received Vendor ID: DPD
INFO: Selected NAT-T version: RFC 3947
NOTIFY: couldn't find the proper pskey, try to get one by the peer's address.
INFO: Adding remote and local NAT-D payloads.
INFO: Hashing 192.168.0.2[500] with algo #2
INFO: Hashing 192.168.0.1[500] with algo #2
INFO: Hashing 192.168.0.1[500] with algo #2
INFO: NAT-D payload #0 verified
INFO: Hashing 192.168.0.2[500] with algo #2
INFO: NAT-D payload #1 verified
INFO: NAT not detected
INFO: ISAKMP-SA established 192.168.0.1[500]-192.168.0.2[500] spi:174237a9a3178169:c4ebac56f9847803
INFO: respond new phase 2 negotiation: 192.168.0.1[500]<=>192.168.0.2[500]
INFO: Update the generated policy : 192.168.0.2/32[500] 192.168.0.1/32[500] proto=any dir=in
INFO: IPsec-SA established: ESP/Transport 192.168.0.2[500]->192.168.0.1[500] spi=58330792(0x37a0ea8)
INFO: IPsec-SA established: IPCOMP/Transport 192.168.0.2[500]->192.168.0.1[500] spi=63472(0xf7f0)
INFO: IPsec-SA established: ESP/Transport 192.168.0.1[500]->192.168.0.2[500] spi=25991933(0x18c9afd)
INFO: IPsec-SA established: IPCOMP/Transport 192.168.0.1[500]->192.168.0.2[500] spi=18948(0x4a04)
ERROR: pfkey X_SPDUPDATE failed: Invalid argument
ERROR: pfkey X_SPDUPDATE failed: Invalid argument

※ もしかしたら NAT-Traversal : on にしていたのかもしれないとかなんとか



◇ 環境


CentOS release 5.4 (Final) + kernel 2.6.18
ipsec-tools 0.6.5

2010-02-08

実装 : 事前共有鍵認証 トランスポートモード(esp)

 
◆ 構成


              ┌────┴────┐
              │                  │ 
 192.168.0.1┌┴┐              ┌┴┐192.168.0.2
            │ │              │ │
            └┬┘              └┬┘
              │                  │



◆ 192.168.0.1 の設定


# IEK 設定用ファイルの設定
#vi /home/racoon/sample1/racoon.conf
-----
path include  "/usr/local/sbin/racoon";
path pre_shared_key "/home/racoon/sample1/psk.txt";
log notify;
listen {
    isakmp 192.168.0.1 [500];
}
remote anonymous {
    exchange_mode aggressive;
    lifetime time 8 hour;
    passive on;
    proposal {
        encryption_algorithm aes;
        hash_algorithm sha1;
        authentication_method pre_shared_key;
        dh_group 2;
    }
}
sainfo anonymous {
    pfs_group 2;
    lifetime time 8 hour;
    encryption_algorithm aes;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}
-----


# セキュリティポリシー設定ファイルの設定
#vi /home/racoon/sample1/ipsec.conf
-----
flush;
spdflush;

spdadd 192.168.0.1 192.168.0.2 any -P out ipsec esp/transport//require;
spdadd 192.168.0.2 192.168.0.1 any -P in ipsec esp/transport//require;
-----


# 事前共有鍵の設定
#vi /home/racoon/sample1/psk.txt
-----
192.168.0.2 abcdefg1234567890
-----
#chmod 0400 /home/racoon/sample1/psk.txt


# iptables の設定
#iptables -A INPUT -s 192.168.0.2 -p esp -j ACCEPT
#iptables -A INPUT -s 192.168.0.2 -p udp -m udp --dport 500 -j ACCEPT
※ その他諸々いるかもしれない



◆ 192.168.0.2 の設定


# IEK 設定用ファイルの設定
#vi /home/racoon/sample1/racoon.conf
-----
path include  "/usr/local/sbin/racoon";
path pre_shared_key "/home/racoon/sample1/psk.txt";
log notify;
listen {
    isakmp 192.168.0.2 [500];
}
remote 192.168.0.1 {
    exchange_mode aggressive;
    lifetime time 8 hour;
    proposal {
        encryption_algorithm aes;
        hash_algorithm sha1;
        authentication_method pre_shared_key;
        dh_group 2;
    }
}
sainfo anonymous {
    pfs_group 2;
    lifetime time 8 hour;
    encryption_algorithm aes;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}
-----


# セキュリティポリシー設定ファイルの設定
#vi /home/racoon/sample1/ipsec.conf
-----
flush;
spdflush;

spdadd 192.168.0.2 192.168.0.1 any -P out ipsec esp/transport//require;
spdadd 192.168.0.1 192.168.0.2 any -P in ipsec esp/transport//require;
-----


# 事前共有鍵の設定
#vi /home/racoon/sample1/psk.txt
-----
192.168.0.1 abcdefg1234567890
-----
#chmod 0400 /home/racoon/sample1/psk.txt



◆ 実行


/usr/local/sbin/setkey -F
/usr/local/sbin/setkey -FP
/usr/local/sbin/setkey -f /home/racoon/sample1/ipsec.conf
/usr/local/sbin/racoon -f /home/racoon/sample1/racoon.conf



◆ 接続


# 192.168.0.2
#ping 192.168.0.1


# 192.168.0.1 - log
INFO: respond new phase 1 negotiation: 192.168.0.1[500]<=>192.168.0.2[500]
INFO: begin Aggressive mode.
INFO: received Vendor ID: DPD
NOTIFY: couldn't find the proper pskey, try to get one by the peer's address.
INFO: ISAKMP-SA established 192.168.0.1[500]-192.168.0.2[500] spi:201e2979eee6c7ab:aa97388530b073a7
INFO: respond new phase 2 negotiation: 192.168.0.1[500]<=>192.168.0.2[500]
INFO: IPsec-SA established: ESP/Transport 192.168.0.2[500]->192.168.0.1[500] spi=166677082(0x9ef4a5a)
INFO: IPsec-SA established: ESP/Transport 192.168.0.1[500]->192.168.0.2[500] spi=106004457(0x6517fe9)



◇ 環境


CentOS release 5.4 (Final) + kernel 2.6.18
ipsec-tools 0.6.5