<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yukiko05</id>
	<title>ArchWiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yukiko05"/>
	<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php/%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/Yukiko05"/>
	<updated>2026-04-15T06:35:30Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=WireGuard&amp;diff=19608</id>
		<title>WireGuard</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=WireGuard&amp;diff=19608"/>
		<updated>2021-04-03T10:42:05Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Virtual Private Network]]&lt;br /&gt;
[[en:WireGuard]]&lt;br /&gt;
[[zh-hans:WireGuard]]&lt;br /&gt;
[https://www.wireguard.com/ WireGuard] のホームページより:&lt;br /&gt;
:Wireguard は最先端の暗号技術を使用する非常にシンプルで高速な VPN です。IPSec よりも高速・単純・軽量・有用であることを目指しており、面倒なことを避けています。OpenVPN と比べると高いパフォーマンスを発揮します。WireGuard は組み込みインターフェイスからスーパーコンピュータまで様々な環境に対応する汎用の VPN として設計されています。最初は Linux カーネル用にリリースされており、幅広いデプロイが可能なクロスプラットフォームになる予定です。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{pkg|wireguard-tools}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
&lt;br /&gt;
ここでは以下の構成でピア間のトンネルを設定する方法を説明します:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &lt;br /&gt;
! Peer A&lt;br /&gt;
! Peer B&lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| 外部 IP アドレス&lt;br /&gt;
| 10.10.10.1/24&lt;br /&gt;
| 10.10.10.2/24&lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| 内部 IP アドレス&lt;br /&gt;
| 10.0.0.1/24&lt;br /&gt;
| 10.0.0.2/24&lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| wireguard 使用ポート&lt;br /&gt;
| UDP/48574&lt;br /&gt;
| UDP/39814&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
外部アドレスはあらかじめ用意してください。例えば、ピア A からピア B に {{ic|ping 10.10.10.2}} で ping が通るようにする必要があります。内部アドレスは {{ic|ip}} コマンドで作成する新しいアドレスで、WireGuard ネットワーク内で内部的に共有します。IP アドレスの {{ic|/24}} は [[wikipedia:Classless_Inter-Domain_Routing#CIDR_notation|CIDR]] です。&lt;br /&gt;
&lt;br /&gt;
==== 鍵の生成 ====&lt;br /&gt;
&lt;br /&gt;
{{Note|秘密鍵ファイルを保存するときは {{ic|600}} などのように厳しいパーミッションを使うことを推奨します。}}&lt;br /&gt;
&lt;br /&gt;
秘密鍵を作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey &amp;gt; privatekey&lt;br /&gt;
&lt;br /&gt;
公開鍵を作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ wg pubkey &amp;lt; privatekey &amp;gt; publickey&lt;br /&gt;
&lt;br /&gt;
もしくは、秘密鍵と公開鍵を同時に作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee privatekey | wg pubkey &amp;gt; publickey&lt;br /&gt;
&lt;br /&gt;
量子コンピュータが実用化された場合を考慮して、既存の公開鍵暗号に対称鍵暗号のレイヤーを追加するために事前共有鍵を生成することもできます:&lt;br /&gt;
&lt;br /&gt;
 # wg genpsk &amp;gt; preshared&lt;br /&gt;
&lt;br /&gt;
==== Peer A の設定 ====&lt;br /&gt;
&lt;br /&gt;
このピアでは UDP ポート 48574 を開いて内部・外部 IP アドレスと公開鍵を紐づけてピア B からの接続を許可します:&lt;br /&gt;
&lt;br /&gt;
 # ip link add dev wg0 type wireguard&lt;br /&gt;
 # ip addr add 10.0.0.1/24 dev wg0&lt;br /&gt;
 # wg set wg0 listen-port 48574 private-key ./privatekey&lt;br /&gt;
 # wg set wg0 peer [Peer B public key] persistent-keepalive 25 allowed-ips 10.0.0.2/32 endpoint 10.10.10.2:39814&lt;br /&gt;
 # ip link set wg0 up&lt;br /&gt;
&lt;br /&gt;
{{ic|[Peer B public key]}} は {{ic|1=EsnHH9m6RthHSs+sd9uM6eCHe/mMVFaRh93GYadDDnM=}} という形式で指定してください。{{ic|allowed-ips}} はトラフィックの送信を許可するアドレスのリストを指定してください。{{ic|allowed-ips 0.0.0.0/0}} であらゆるアドレスにトラフィックを送信できるようになります。&lt;br /&gt;
&lt;br /&gt;
==== Peer B の設定 ====&lt;br /&gt;
&lt;br /&gt;
ピア A とほとんど同じですが、wireguard デーモンで使用するのは UDP ポート 39814 でピア A からの接続だけを許可します:&lt;br /&gt;
&lt;br /&gt;
 # ip link add dev wg0 type wireguard&lt;br /&gt;
 # ip addr add 10.0.0.2/24 dev wg0&lt;br /&gt;
 # wg set wg0 listen-port 39814 private-key ./privatekey&lt;br /&gt;
 # wg set wg0 peer [Peer A public key] persistent-keepalive 25 allowed-ips 10.0.0.1/32 endpoint 10.10.10.1:48574&lt;br /&gt;
 # ip link set wg0 up&lt;br /&gt;
&lt;br /&gt;
==== 基本チェック ====&lt;br /&gt;
パラメータを付けずに wg コマンドを呼び出すことで現在の設定を確認できます。&lt;br /&gt;
&lt;br /&gt;
例えば、ピア A で実行すると以下のように表示されます:&lt;br /&gt;
&lt;br /&gt;
 peer-a$ wg&lt;br /&gt;
 interface: wg0&lt;br /&gt;
   public key: UguPyBThx/+xMXeTbRYkKlP0Wh/QZT3vTLPOVaaXTD8=&lt;br /&gt;
   private key: (hidden)&lt;br /&gt;
   listening port: 48574&lt;br /&gt;
 &lt;br /&gt;
 peer: 9jalV3EEBnVXahro0pRMQ+cHlmjE33Slo9tddzCVtCw=&lt;br /&gt;
   endpoint: 10.10.10.2:39814&lt;br /&gt;
   allowed ips: 10.0.0.2/32&lt;br /&gt;
&lt;br /&gt;
トンネルの末端にアクセスすることができるはずです:&lt;br /&gt;
  peer-a$ ping 10.0.0.2&lt;br /&gt;
&lt;br /&gt;
==== 設定の永続化 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|showconf}} を使うことで設定を保存できます:&lt;br /&gt;
 # wg showconf wg0 &amp;gt; /etc/wireguard/wg0.conf&lt;br /&gt;
 # wg setconf wg0 /etc/wireguard/wg0.conf&lt;br /&gt;
&lt;br /&gt;
==== ピア設定例 ====&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/wireguard/wg0.conf|2=&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.0.0.1/32&lt;br /&gt;
PrivateKey = [CLIENT PRIVATE KEY]&lt;br /&gt;
MTU = 1420&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
PublicKey = [SERVER PUBLICKEY]&lt;br /&gt;
AllowedIPs = 10.0.0.0/24, 10.123.45.0/24, 1234:4567:89ab::/48&lt;br /&gt;
Endpoint = [SERVER ENDPOINT]:51820&lt;br /&gt;
PersistentKeepalive = 25&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== systemd-networkd の設定例 ====&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/network/30-wg0.netdev|2=&lt;br /&gt;
[NetDev]&lt;br /&gt;
Name = wg0&lt;br /&gt;
Kind = wireguard&lt;br /&gt;
Description = Wireguard&lt;br /&gt;
&lt;br /&gt;
[WireGuard]&lt;br /&gt;
PrivateKey = [CLIENT PRIVATE KEY]&lt;br /&gt;
&lt;br /&gt;
[WireGuardPeer]&lt;br /&gt;
PublicKey = [SERVER PUBLIC KEY]&lt;br /&gt;
PresharedKey = [PRE SHARED KEY]&lt;br /&gt;
AllowedIPs = 10.0.0.0/24&lt;br /&gt;
Endpoint = [SERVER ENDPOINT]:51820&lt;br /&gt;
PersistentKeepalive = 25&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/network/30-wg0.network|2=&lt;br /&gt;
[Match]&lt;br /&gt;
Name = wg0&lt;br /&gt;
&lt;br /&gt;
[Network]&lt;br /&gt;
Address = 10.0.0.3/32&lt;br /&gt;
DNS = 10.0.0.1&lt;br /&gt;
&lt;br /&gt;
[Route]&lt;br /&gt;
Gateway = 10.0.0.1&lt;br /&gt;
Destination = 10.0.0.0/24&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== VPN サーバーの設定 ==&lt;br /&gt;
&lt;br /&gt;
このセクションでは [[OpenVPN]] などと同じように暗号化されたトンネルを使ってサーバー・ネットワークリソースにアクセスできるようにするため、WireGuard の「サーバー」と汎用的な「クライアント」を設定します。サーバーは Linux で稼働させますがクライアントのプラットフォームは複数選択できます (WireGuard プロジェクトは Linux ネイティブや macOS のソフトウェアに加えて iOS や Android プラットフォームのアプリも提供しています)。詳しくは公式プロジェクトの [https://www.wireguard.com/install/ インストールリンク] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
サーバー側のマシンではまず IPv4 フォワーディングを有効にしてください:&lt;br /&gt;
&lt;br /&gt;
 # sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続化するには {{ic|/etc/sysctl.d/99-sysctl.conf}} に {{ic|1=net.ipv4.ip_forward = 1}} を追加します。&lt;br /&gt;
&lt;br /&gt;
インターネットに接続する場合は[[ファイアウォール]]を設定することが推奨されます:&lt;br /&gt;
* WireGuard が動作するポートの UDP トラフィックを許可してください (例えば 51820/udp のトラフィックを許可)。&lt;br /&gt;
* WireGurad の設定 {{ic|/etc/wireguard/wg0.conf}} に転送ポリシーを記述しない場合はファイアウォールで転送ポリシーを設定してください。以下の例はそのまま動作します。&lt;br /&gt;
&lt;br /&gt;
最後に、WAN からアクセスできるようにするため WireGuard のポートをルーターからサーバーの LAN の IP に転送するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 鍵の生成 ===&lt;br /&gt;
サーバーとクライアントの鍵を[[#鍵の生成]]で説明しているように生成してください。&lt;br /&gt;
&lt;br /&gt;
=== サーバーの設定 ===&lt;br /&gt;
サーバーの設定ファイルを作成:&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;PresharedKey&#039;&#039; 行は任意です。使用する場合、事前共有鍵をサーバーとクライアントの設定ファイルで設定する必要があります。詳しくは wg の [[man ページ]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/wireguard/wg0.conf|2=&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.200.200.1/24&lt;br /&gt;
SaveConfig = true&lt;br /&gt;
ListenPort = 51820&lt;br /&gt;
PrivateKey = [SERVER PRIVATE KEY]&lt;br /&gt;
MTU = 1420&lt;br /&gt;
&lt;br /&gt;
# note - substitute &#039;&#039;eth0&#039;&#039; in the following lines to match the Internet-facing interface&lt;br /&gt;
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
# client foo&lt;br /&gt;
PublicKey = [FOO&#039;s PUBLIC KEY]&lt;br /&gt;
PresharedKey = [PRE-SHARED KEY]&lt;br /&gt;
AllowedIPs = 10.200.200.2/32&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
# client bar&lt;br /&gt;
PublicKey = [BAR&#039;s PUBLIC KEY]&lt;br /&gt;
PresharedKey = [PRE-SHARED KEY]&lt;br /&gt;
AllowedIPs = 10.200.200.3/32&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|必要に応じて同じような形式でピアを追加してください。}}&lt;br /&gt;
&lt;br /&gt;
インターフェイスは手動あるいは [[systemctl]] で制御できます。&lt;br /&gt;
&lt;br /&gt;
{{ic|wg-quick up wg0}} でインターフェイスが立ち上がり {{ic|wg-quick down wg0}} で終了します。&lt;br /&gt;
&lt;br /&gt;
systemctl で制御したい場合、{{ic|wg-quick@.service}} を[[起動]]・[[有効化]]してください。&amp;quot;@&amp;quot; 記号の後ろにサーバーの設定の名前を入力してください。例:&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
=== クライアントの設定 ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定ファイルを作成:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=foo.conf|2=&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.200.200.2/24&lt;br /&gt;
PrivateKey = [FOO&#039;s PRIVATE KEY]&lt;br /&gt;
DNS = 10.200.200.1&lt;br /&gt;
MTU = 1420&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
PublicKey = [SERVER PUBLICKEY]&lt;br /&gt;
PresharedKey = [PRE-SHARED KEY]&lt;br /&gt;
AllowedIPs = 0.0.0.0/0&lt;br /&gt;
Endpoint = my.ddns.address.com:51820&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|1=bar.conf|2=&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.200.200.3/24&lt;br /&gt;
PrivateKey = [BAR&#039;s PRIVATE KEY]&lt;br /&gt;
DNS = 10.200.200.1&lt;br /&gt;
MTU = 1420&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
PublicKey = [SERVER PUBLICKEY]&lt;br /&gt;
PresharedKey = [PRE-SHARED KEY]&lt;br /&gt;
AllowedIPs = 0.0.0.0/0&lt;br /&gt;
Endpoint = my.ddns.address.com:51820&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=設定ファイルを作るときは、公開・秘密鍵と &#039;&#039;Address =&#039;&#039; の値を適当に置き換えてください。}}&lt;br /&gt;
&lt;br /&gt;
クライアントがスマートフォンなどの場合、{{Pkg|qrencode}} を使って設定を共有することができます:&lt;br /&gt;
 $ qrencode -t ansiutf8 &amp;lt; foo.conf&lt;br /&gt;
&lt;br /&gt;
{{Note|[[NetworkManager]] を使用している場合、{{ic|NetworkManager-wait-online.service}} を、[[systemd-networkd]] を使用している場合、{{ic|systemd-networkd-wait-online.service}} を有効化することでネットワーク接続が有効になってからサービスが実行されるようになります。}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== ルートが定期的にリセットされる ===&lt;br /&gt;
&lt;br /&gt;
[[NetworkManager]] が WireGuard のインターフェイスを管理しないようにしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/NetworkManager/conf.d/unmanaged.conf|2=&lt;br /&gt;
[keyfile]&lt;br /&gt;
unmanaged-devices=interface-name:wg0&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
=== NetworkManager で切断される ===&lt;br /&gt;
&lt;br /&gt;
デスクトップの場合、全てのトラフィックを WireGuard のインターフェイス経由にすると切断が発生することがあります。アクセスポイントに新しく接続してしばらくした後に切断が発生します。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは &#039;&#039;wg-quick&#039;&#039; は [[openresolv]] などの resolvconf プロバイダを使用して新しい [[DNS]] エントリを登録します (設定ファイルの {{ic|DNS}} キーワード)。しかしながら [[NetworkManager]] はデフォルトでは resolvconf を使用しません。新しい [[DHCP]] リースが取得されるたびに [[NetworkManager]] は DHCP によって提供されたアドレスで全体の DNS アドレスを上書きします。&lt;br /&gt;
&lt;br /&gt;
==== resolvconf を使う ====&lt;br /&gt;
&lt;br /&gt;
システムで resolvconf を使っていて接続が切れる場合、NetworkManager が resolvconf を使うように設定してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/NetworkManager/conf.d/rc-manager.conf|2=&lt;br /&gt;
[main]&lt;br /&gt;
rc-manager=resolvconf&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== dnsmasq を使う ====&lt;br /&gt;
&lt;br /&gt;
[[Dnsmasq#openresolv]] を見てください。&lt;br /&gt;
&lt;br /&gt;
==== systemd-resolved を使う ====&lt;br /&gt;
&lt;br /&gt;
2018年9月時点では、{{Pkg|systemd-resolvconf}} による resolvconf 互換モードは &#039;&#039;wg-quick&#039;&#039; で機能しません。ただし {{ic|PostUp}} フックを使うことで &#039;&#039;wg-quick&#039;&#039; から [[systemd-resolved]] を使用することはできます。まず NetworkManager で &#039;&#039;systemd-resolved&#039;&#039; を使うように設定: [[NetworkManager#systemd-resolved]]。それからトンネルの設定を変更:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/wireguard/wg0.conf|2=&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.0.0.2/24  # The client IP from wg0server.conf with the same subnet mask&lt;br /&gt;
PrivateKey = [CLIENT PRIVATE KEY]&lt;br /&gt;
PostUp = resolvectl domain %i &amp;quot;~.&amp;quot;; resolvectl dns %i 10.0.0.1; resolvectl dnssec %i yes&lt;br /&gt;
MTU = 1420&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
PublicKey = [SERVER PUBLICKEY]&lt;br /&gt;
AllowedIPs = 0.0.0.0/0, ::0/0&lt;br /&gt;
Endpoint = [SERVER ENDPOINT]:51820&lt;br /&gt;
PersistentKeepalive = 25&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しく利用可能になった DNS サーバーに優先度を与えるためにドメイン名は {{ic|&amp;quot;~.&amp;quot;}} に設定する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|wg0}} が落ちたときに &#039;&#039;systemd-resolved&#039;&#039; は自動的に全てのパラメータを戻すため {{ic|PostDown}} キーは必要ありません。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 秘密鍵を暗号化して保存 ===&lt;br /&gt;
&lt;br /&gt;
設定ファイルの [Interface] セクションの PrivateKey 行を以下のように置き換えることで [[pass]] を使って秘密鍵を暗号化できます:&lt;br /&gt;
&lt;br /&gt;
 PostUp = wg set %i private-key &amp;lt;(su user -c &amp;quot;export PASSWORD_STORE_DIR=/path/to/your/store/; pass WireGuard/private-keys/%i&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
user はユーザー名に置き換えてください。詳しくは {{man|8|wg-quick}} を参照。&lt;br /&gt;
&lt;br /&gt;
=== IP が変わるエンドポイント ===&lt;br /&gt;
&lt;br /&gt;
サーバーのドメインの解決後、WireGuard は DNS で再度変更をチェックすることはありません [https://lists.zx2c4.com/pipermail/wireguard/2017-November/002028.html]。&lt;br /&gt;
&lt;br /&gt;
WireGuard サーバーの IP アドレスが DHCP, Dyndns, IPv6 などによって頻繁に変更された場合、WireGuard クライアントは接続を失います。その際 {{ic|wg set &amp;quot;$INTERFACE&amp;quot; peer &amp;quot;$PUBLIC_KEY&amp;quot; endpoint &amp;quot;$ENDPOINT&amp;quot;}} などのようにエンドポイントを更新しなくてはなりません。&lt;br /&gt;
&lt;br /&gt;
また、エンドポイントがアドレスを変更したとき (例えば新しいプロバイダ・データセンターに移行した場合)、DNS を更新するだけでは不十分となるため、DNS ベースのセットアップでは reresolve-dns を定期的に実行する必要が出てきます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|wireguard-tools}} には WG の設定ファイルを読み込んでエンドポイントのアドレスを自動的にリセットするスクリプト {{ic|/usr/share/wireguard/examples/reresolve-dns/reresolve-dns.sh}} が含まれています。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/wireguard/examples/reresolve-dns/reresolve-dns.sh /etc/wireguard/wg.conf}} を定期的に実行することで IP が変わったエンドポイントから復旧できます。&lt;br /&gt;
&lt;br /&gt;
systemd タイマーを使って30秒ごとに WireGuard のエンドポイントを更新する例 [https://git.zx2c4.com/WireGuard/tree/contrib/examples/reresolve-dns/README]:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/wireguard_reresolve-dns.timer|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Periodically reresolve DNS of all WireGuard endpoints&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=*:*:0/30&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/wireguard_reresolve-dns.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Reresolve DNS of all WireGuard endpoints&lt;br /&gt;
Wants=network-online.target&lt;br /&gt;
After=network-online.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/bin/sh -c &#039;for i in /etc/wireguard/*.conf; do /usr/share/wireguard/examples/reresolve-dns/reresolve-dns.sh &amp;quot;\$i&amp;quot;; done&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記ファイルを作成したら {{ic|wireguard_reresolve-dns.timer}} を[[起動]]・[[有効化]]してください。&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=WireGuard&amp;diff=19607</id>
		<title>WireGuard</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=WireGuard&amp;diff=19607"/>
		<updated>2021-04-03T09:00:23Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: Same MTU in different peer.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Virtual Private Network]]&lt;br /&gt;
[[en:WireGuard]]&lt;br /&gt;
[[zh-hans:WireGuard]]&lt;br /&gt;
[https://www.wireguard.com/ WireGuard] のホームページより:&lt;br /&gt;
:Wireguard は最先端の暗号技術を使用する非常にシンプルで高速な VPN です。IPSec よりも高速・単純・軽量・有用であることを目指しており、面倒なことを避けています。OpenVPN と比べると高いパフォーマンスを発揮します。WireGuard は組み込みインターフェイスからスーパーコンピュータまで様々な環境に対応する汎用の VPN として設計されています。最初は Linux カーネル用にリリースされており、幅広いデプロイが可能なクロスプラットフォームになる予定です。&lt;br /&gt;
&lt;br /&gt;
{{Warning|WireGuard はセキュリティ監査を完全に通過してはおらずプロトコルはまだ変わる可能性があります [https://www.wireguard.com/#work-in-progress]。}}&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{pkg|wireguard-tools}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|WireGuard はメインラインに入っていないため [[DKMS]] によって必要なカーネルモジュールがビルドされます。そのため、先に必要なカーネルヘッダーパッケージをインストールしてください。}}&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
&lt;br /&gt;
ここでは以下の構成でピア間のトンネルを設定する方法を説明します:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &lt;br /&gt;
! Peer A&lt;br /&gt;
! Peer B&lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| 外部 IP アドレス&lt;br /&gt;
| 10.10.10.1/24&lt;br /&gt;
| 10.10.10.2/24&lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| 内部 IP アドレス&lt;br /&gt;
| 10.0.0.1/24&lt;br /&gt;
| 10.0.0.2/24&lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| wireguard 使用ポート&lt;br /&gt;
| UDP/48574&lt;br /&gt;
| UDP/39814&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
外部アドレスはあらかじめ用意してください。例えば、ピア A からピア B に {{ic|ping 10.10.10.2}} で ping が通るようにする必要があります。内部アドレスは {{ic|ip}} コマンドで作成する新しいアドレスで、WireGuard ネットワーク内で内部的に共有します。IP アドレスの {{ic|/24}} は [[wikipedia:Classless_Inter-Domain_Routing#CIDR_notation|CIDR]] です。&lt;br /&gt;
&lt;br /&gt;
==== 鍵の生成 ====&lt;br /&gt;
&lt;br /&gt;
{{Note|秘密鍵ファイルを保存するときは {{ic|600}} などのように厳しいパーミッションを使うことを推奨します。}}&lt;br /&gt;
&lt;br /&gt;
秘密鍵を作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey &amp;gt; privatekey&lt;br /&gt;
&lt;br /&gt;
公開鍵を作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ wg pubkey &amp;lt; privatekey &amp;gt; publickey&lt;br /&gt;
&lt;br /&gt;
もしくは、秘密鍵と公開鍵を同時に作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee privatekey | wg pubkey &amp;gt; publickey&lt;br /&gt;
&lt;br /&gt;
量子コンピュータが実用化された場合を考慮して、既存の公開鍵暗号に対称鍵暗号のレイヤーを追加するために事前共有鍵を生成することもできます:&lt;br /&gt;
&lt;br /&gt;
 # wg genpsk &amp;gt; preshared&lt;br /&gt;
&lt;br /&gt;
==== Peer A の設定 ====&lt;br /&gt;
&lt;br /&gt;
このピアでは UDP ポート 48574 を開いて内部・外部 IP アドレスと公開鍵を紐づけてピア B からの接続を許可します:&lt;br /&gt;
&lt;br /&gt;
 # ip link add dev wg0 type wireguard&lt;br /&gt;
 # ip addr add 10.0.0.1/24 dev wg0&lt;br /&gt;
 # wg set wg0 listen-port 48574 private-key ./privatekey&lt;br /&gt;
 # wg set wg0 peer [Peer B public key] persistent-keepalive 25 allowed-ips 10.0.0.2/32 endpoint 10.10.10.2:39814&lt;br /&gt;
 # ip link set wg0 up&lt;br /&gt;
&lt;br /&gt;
{{ic|[Peer B public key]}} は {{ic|1=EsnHH9m6RthHSs+sd9uM6eCHe/mMVFaRh93GYadDDnM=}} という形式で指定してください。{{ic|allowed-ips}} はトラフィックの送信を許可するアドレスのリストを指定してください。{{ic|allowed-ips 0.0.0.0/0}} であらゆるアドレスにトラフィックを送信できるようになります。&lt;br /&gt;
&lt;br /&gt;
==== Peer B の設定 ====&lt;br /&gt;
&lt;br /&gt;
ピア A とほとんど同じですが、wireguard デーモンで使用するのは UDP ポート 39814 でピア A からの接続だけを許可します:&lt;br /&gt;
&lt;br /&gt;
 # ip link add dev wg0 type wireguard&lt;br /&gt;
 # ip addr add 10.0.0.2/24 dev wg0&lt;br /&gt;
 # wg set wg0 listen-port 39814 private-key ./privatekey&lt;br /&gt;
 # wg set wg0 peer [Peer A public key] persistent-keepalive 25 allowed-ips 10.0.0.1/32 endpoint 10.10.10.1:48574&lt;br /&gt;
 # ip link set wg0 up&lt;br /&gt;
&lt;br /&gt;
==== 基本チェック ====&lt;br /&gt;
パラメータを付けずに wg コマンドを呼び出すことで現在の設定を確認できます。&lt;br /&gt;
&lt;br /&gt;
例えば、ピア A で実行すると以下のように表示されます:&lt;br /&gt;
&lt;br /&gt;
 peer-a$ wg&lt;br /&gt;
 interface: wg0&lt;br /&gt;
   public key: UguPyBThx/+xMXeTbRYkKlP0Wh/QZT3vTLPOVaaXTD8=&lt;br /&gt;
   private key: (hidden)&lt;br /&gt;
   listening port: 48574&lt;br /&gt;
 &lt;br /&gt;
 peer: 9jalV3EEBnVXahro0pRMQ+cHlmjE33Slo9tddzCVtCw=&lt;br /&gt;
   endpoint: 10.10.10.2:39814&lt;br /&gt;
   allowed ips: 10.0.0.2/32&lt;br /&gt;
&lt;br /&gt;
トンネルの末端にアクセスすることができるはずです:&lt;br /&gt;
  peer-a$ ping 10.0.0.2&lt;br /&gt;
&lt;br /&gt;
==== 設定の永続化 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|showconf}} を使うことで設定を保存できます:&lt;br /&gt;
 # wg showconf wg0 &amp;gt; /etc/wireguard/wg0.conf&lt;br /&gt;
 # wg setconf wg0 /etc/wireguard/wg0.conf&lt;br /&gt;
&lt;br /&gt;
==== ピア設定例 ====&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/wireguard/wg0.conf|2=&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.0.0.1/32&lt;br /&gt;
PrivateKey = [CLIENT PRIVATE KEY]&lt;br /&gt;
MTU = 1420&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
PublicKey = [SERVER PUBLICKEY]&lt;br /&gt;
AllowedIPs = 10.0.0.0/24, 10.123.45.0/24, 1234:4567:89ab::/48&lt;br /&gt;
Endpoint = [SERVER ENDPOINT]:51820&lt;br /&gt;
PersistentKeepalive = 25&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== systemd-networkd の設定例 ====&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/network/30-wg0.netdev|2=&lt;br /&gt;
[NetDev]&lt;br /&gt;
Name = wg0&lt;br /&gt;
Kind = wireguard&lt;br /&gt;
Description = Wireguard&lt;br /&gt;
&lt;br /&gt;
[WireGuard]&lt;br /&gt;
PrivateKey = [CLIENT PRIVATE KEY]&lt;br /&gt;
&lt;br /&gt;
[WireGuardPeer]&lt;br /&gt;
PublicKey = [SERVER PUBLIC KEY]&lt;br /&gt;
PresharedKey = [PRE SHARED KEY]&lt;br /&gt;
AllowedIPs = 10.0.0.0/24&lt;br /&gt;
Endpoint = [SERVER ENDPOINT]:51820&lt;br /&gt;
PersistentKeepalive = 25&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/network/30-wg0.network|2=&lt;br /&gt;
[Match]&lt;br /&gt;
Name = wg0&lt;br /&gt;
&lt;br /&gt;
[Network]&lt;br /&gt;
Address = 10.0.0.3/32&lt;br /&gt;
DNS = 10.0.0.1&lt;br /&gt;
&lt;br /&gt;
[Route]&lt;br /&gt;
Gateway = 10.0.0.1&lt;br /&gt;
Destination = 10.0.0.0/24&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== VPN サーバーの設定 ==&lt;br /&gt;
&lt;br /&gt;
このセクションでは [[OpenVPN]] などと同じように暗号化されたトンネルを使ってサーバー・ネットワークリソースにアクセスできるようにするため、WireGuard の「サーバー」と汎用的な「クライアント」を設定します。サーバーは Linux で稼働させますがクライアントのプラットフォームは複数選択できます (WireGuard プロジェクトは Linux ネイティブや macOS のソフトウェアに加えて iOS や Android プラットフォームのアプリも提供しています)。詳しくは公式プロジェクトの [https://www.wireguard.com/install/ インストールリンク] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
サーバー側のマシンではまず IPv4 フォワーディングを有効にしてください:&lt;br /&gt;
&lt;br /&gt;
 # sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続化するには {{ic|/etc/sysctl.d/99-sysctl.conf}} に {{ic|1=net.ipv4.ip_forward = 1}} を追加します。&lt;br /&gt;
&lt;br /&gt;
インターネットに接続する場合は[[ファイアウォール]]を設定することが推奨されます:&lt;br /&gt;
* WireGuard が動作するポートの UDP トラフィックを許可してください (例えば 51820/udp のトラフィックを許可)。&lt;br /&gt;
* WireGurad の設定 {{ic|/etc/wireguard/wg0.conf}} に転送ポリシーを記述しない場合はファイアウォールで転送ポリシーを設定してください。以下の例はそのまま動作します。&lt;br /&gt;
&lt;br /&gt;
最後に、WAN からアクセスできるようにするため WireGuard のポートをルーターからサーバーの LAN の IP に転送するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 鍵の生成 ===&lt;br /&gt;
サーバーとクライアントの鍵を[[#鍵の生成]]で説明しているように生成してください。&lt;br /&gt;
&lt;br /&gt;
=== サーバーの設定 ===&lt;br /&gt;
サーバーの設定ファイルを作成:&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;PresharedKey&#039;&#039; 行は任意です。使用する場合、事前共有鍵をサーバーとクライアントの設定ファイルで設定する必要があります。詳しくは wg の [[man ページ]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/wireguard/wg0.conf|2=&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.200.200.1/24&lt;br /&gt;
SaveConfig = true&lt;br /&gt;
ListenPort = 51820&lt;br /&gt;
PrivateKey = [SERVER PRIVATE KEY]&lt;br /&gt;
MTU = 1420&lt;br /&gt;
&lt;br /&gt;
# note - substitute &#039;&#039;eth0&#039;&#039; in the following lines to match the Internet-facing interface&lt;br /&gt;
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
# client foo&lt;br /&gt;
PublicKey = [FOO&#039;s PUBLIC KEY]&lt;br /&gt;
PresharedKey = [PRE-SHARED KEY]&lt;br /&gt;
AllowedIPs = 10.200.200.2/32&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
# client bar&lt;br /&gt;
PublicKey = [BAR&#039;s PUBLIC KEY]&lt;br /&gt;
PresharedKey = [PRE-SHARED KEY]&lt;br /&gt;
AllowedIPs = 10.200.200.3/32&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|必要に応じて同じような形式でピアを追加してください。}}&lt;br /&gt;
&lt;br /&gt;
インターフェイスは手動あるいは [[systemctl]] で制御できます。&lt;br /&gt;
&lt;br /&gt;
{{ic|wg-quick up wg0}} でインターフェイスが立ち上がり {{ic|wg-quick down wg0}} で終了します。&lt;br /&gt;
&lt;br /&gt;
systemctl で制御したい場合、{{ic|wg-quick@.service}} を[[起動]]・[[有効化]]してください。&amp;quot;@&amp;quot; 記号の後ろにサーバーの設定の名前を入力してください。例:&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
=== クライアントの設定 ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定ファイルを作成:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=foo.conf|2=&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.200.200.2/24&lt;br /&gt;
PrivateKey = [FOO&#039;s PRIVATE KEY]&lt;br /&gt;
DNS = 10.200.200.1&lt;br /&gt;
MTU = 1420&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
PublicKey = [SERVER PUBLICKEY]&lt;br /&gt;
PresharedKey = [PRE-SHARED KEY]&lt;br /&gt;
AllowedIPs = 0.0.0.0/0&lt;br /&gt;
Endpoint = my.ddns.address.com:51820&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|1=bar.conf|2=&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.200.200.3/24&lt;br /&gt;
PrivateKey = [BAR&#039;s PRIVATE KEY]&lt;br /&gt;
DNS = 10.200.200.1&lt;br /&gt;
MTU = 1420&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
PublicKey = [SERVER PUBLICKEY]&lt;br /&gt;
PresharedKey = [PRE-SHARED KEY]&lt;br /&gt;
AllowedIPs = 0.0.0.0/0&lt;br /&gt;
Endpoint = my.ddns.address.com:51820&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=設定ファイルを作るときは、公開・秘密鍵と &#039;&#039;Address =&#039;&#039; の値を適当に置き換えてください。}}&lt;br /&gt;
&lt;br /&gt;
クライアントがスマートフォンなどの場合、{{Pkg|qrencode}} を使って設定を共有することができます:&lt;br /&gt;
 $ qrencode -t ansiutf8 &amp;lt; foo.conf&lt;br /&gt;
&lt;br /&gt;
{{Note|[[NetworkManager]] を使用している場合、{{ic|NetworkManager-wait-online.service}} を、[[systemd-networkd]] を使用している場合、{{ic|systemd-networkd-wait-online.service}} を有効化することでネットワーク接続が有効になってからサービスが実行されるようになります。}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== ルートが定期的にリセットされる ===&lt;br /&gt;
&lt;br /&gt;
[[NetworkManager]] が WireGuard のインターフェイスを管理しないようにしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/NetworkManager/conf.d/unmanaged.conf|2=&lt;br /&gt;
[keyfile]&lt;br /&gt;
unmanaged-devices=interface-name:wg0&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
=== NetworkManager で切断される ===&lt;br /&gt;
&lt;br /&gt;
デスクトップの場合、全てのトラフィックを WireGuard のインターフェイス経由にすると切断が発生することがあります。アクセスポイントに新しく接続してしばらくした後に切断が発生します。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは &#039;&#039;wg-quick&#039;&#039; は [[openresolv]] などの resolvconf プロバイダを使用して新しい [[DNS]] エントリを登録します (設定ファイルの {{ic|DNS}} キーワード)。しかしながら [[NetworkManager]] はデフォルトでは resolvconf を使用しません。新しい [[DHCP]] リースが取得されるたびに [[NetworkManager]] は DHCP によって提供されたアドレスで全体の DNS アドレスを上書きします。&lt;br /&gt;
&lt;br /&gt;
==== resolvconf を使う ====&lt;br /&gt;
&lt;br /&gt;
システムで resolvconf を使っていて接続が切れる場合、NetworkManager が resolvconf を使うように設定してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/NetworkManager/conf.d/rc-manager.conf|2=&lt;br /&gt;
[main]&lt;br /&gt;
rc-manager=resolvconf&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== dnsmasq を使う ====&lt;br /&gt;
&lt;br /&gt;
[[Dnsmasq#openresolv]] を見てください。&lt;br /&gt;
&lt;br /&gt;
==== systemd-resolved を使う ====&lt;br /&gt;
&lt;br /&gt;
2018年9月時点では、{{Pkg|systemd-resolvconf}} による resolvconf 互換モードは &#039;&#039;wg-quick&#039;&#039; で機能しません。ただし {{ic|PostUp}} フックを使うことで &#039;&#039;wg-quick&#039;&#039; から [[systemd-resolved]] を使用することはできます。まず NetworkManager で &#039;&#039;systemd-resolved&#039;&#039; を使うように設定: [[NetworkManager#systemd-resolved]]。それからトンネルの設定を変更:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/wireguard/wg0.conf|2=&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.0.0.2/24  # The client IP from wg0server.conf with the same subnet mask&lt;br /&gt;
PrivateKey = [CLIENT PRIVATE KEY]&lt;br /&gt;
PostUp = resolvectl domain %i &amp;quot;~.&amp;quot;; resolvectl dns %i 10.0.0.1; resolvectl dnssec %i yes&lt;br /&gt;
MTU = 1420&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
PublicKey = [SERVER PUBLICKEY]&lt;br /&gt;
AllowedIPs = 0.0.0.0/0, ::0/0&lt;br /&gt;
Endpoint = [SERVER ENDPOINT]:51820&lt;br /&gt;
PersistentKeepalive = 25&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しく利用可能になった DNS サーバーに優先度を与えるためにドメイン名は {{ic|&amp;quot;~.&amp;quot;}} に設定する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|wg0}} が落ちたときに &#039;&#039;systemd-resolved&#039;&#039; は自動的に全てのパラメータを戻すため {{ic|PostDown}} キーは必要ありません。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 秘密鍵を暗号化して保存 ===&lt;br /&gt;
&lt;br /&gt;
設定ファイルの [Interface] セクションの PrivateKey 行を以下のように置き換えることで [[pass]] を使って秘密鍵を暗号化できます:&lt;br /&gt;
&lt;br /&gt;
 PostUp = wg set %i private-key &amp;lt;(su user -c &amp;quot;export PASSWORD_STORE_DIR=/path/to/your/store/; pass WireGuard/private-keys/%i&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
user はユーザー名に置き換えてください。詳しくは {{man|8|wg-quick}} を参照。&lt;br /&gt;
&lt;br /&gt;
=== IP が変わるエンドポイント ===&lt;br /&gt;
&lt;br /&gt;
サーバーのドメインの解決後、WireGuard は DNS で再度変更をチェックすることはありません [https://lists.zx2c4.com/pipermail/wireguard/2017-November/002028.html]。&lt;br /&gt;
&lt;br /&gt;
WireGuard サーバーの IP アドレスが DHCP, Dyndns, IPv6 などによって頻繁に変更された場合、WireGuard クライアントは接続を失います。その際 {{ic|wg set &amp;quot;$INTERFACE&amp;quot; peer &amp;quot;$PUBLIC_KEY&amp;quot; endpoint &amp;quot;$ENDPOINT&amp;quot;}} などのようにエンドポイントを更新しなくてはなりません。&lt;br /&gt;
&lt;br /&gt;
また、エンドポイントがアドレスを変更したとき (例えば新しいプロバイダ・データセンターに移行した場合)、DNS を更新するだけでは不十分となるため、DNS ベースのセットアップでは reresolve-dns を定期的に実行する必要が出てきます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|wireguard-tools}} には WG の設定ファイルを読み込んでエンドポイントのアドレスを自動的にリセットするスクリプト {{ic|/usr/share/wireguard/examples/reresolve-dns/reresolve-dns.sh}} が含まれています。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/wireguard/examples/reresolve-dns/reresolve-dns.sh /etc/wireguard/wg.conf}} を定期的に実行することで IP が変わったエンドポイントから復旧できます。&lt;br /&gt;
&lt;br /&gt;
systemd タイマーを使って30秒ごとに WireGuard のエンドポイントを更新する例 [https://git.zx2c4.com/WireGuard/tree/contrib/examples/reresolve-dns/README]:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/wireguard_reresolve-dns.timer|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Periodically reresolve DNS of all WireGuard endpoints&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=*:*:0/30&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/wireguard_reresolve-dns.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Reresolve DNS of all WireGuard endpoints&lt;br /&gt;
Wants=network-online.target&lt;br /&gt;
After=network-online.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/bin/sh -c &#039;for i in /etc/wireguard/*.conf; do /usr/share/wireguard/examples/reresolve-dns/reresolve-dns.sh &amp;quot;\$i&amp;quot;; done&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記ファイルを作成したら {{ic|wireguard_reresolve-dns.timer}} を[[起動]]・[[有効化]]してください。&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=WireGuard&amp;diff=19599</id>
		<title>WireGuard</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=WireGuard&amp;diff=19599"/>
		<updated>2021-04-01T14:58:50Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: Same MTU in different peer.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Virtual Private Network]]&lt;br /&gt;
[[en:WireGuard]]&lt;br /&gt;
[[zh-hans:WireGuard]]&lt;br /&gt;
[https://www.wireguard.com/ WireGuard] のホームページより:&lt;br /&gt;
:Wireguard は最先端の暗号技術を使用する非常にシンプルで高速な VPN です。IPSec よりも高速・単純・軽量・有用であることを目指しており、面倒なことを避けています。OpenVPN と比べると高いパフォーマンスを発揮します。WireGuard は組み込みインターフェイスからスーパーコンピュータまで様々な環境に対応する汎用の VPN として設計されています。最初は Linux カーネル用にリリースされており、幅広いデプロイが可能なクロスプラットフォームになる予定です。&lt;br /&gt;
&lt;br /&gt;
{{Warning|WireGuard はセキュリティ監査を完全に通過してはおらずプロトコルはまだ変わる可能性があります [https://www.wireguard.com/#work-in-progress]。}}&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{pkg|wireguard-tools}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|WireGuard はメインラインに入っていないため [[DKMS]] によって必要なカーネルモジュールがビルドされます。そのため、先に必要なカーネルヘッダーパッケージをインストールしてください。}}&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
&lt;br /&gt;
ここでは以下の構成でピア間のトンネルを設定する方法を説明します:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &lt;br /&gt;
! Peer A&lt;br /&gt;
! Peer B&lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| 外部 IP アドレス&lt;br /&gt;
| 10.10.10.1/24&lt;br /&gt;
| 10.10.10.2/24&lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| 内部 IP アドレス&lt;br /&gt;
| 10.0.0.1/24&lt;br /&gt;
| 10.0.0.2/24&lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| wireguard 使用ポート&lt;br /&gt;
| UDP/48574&lt;br /&gt;
| UDP/39814&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
外部アドレスはあらかじめ用意してください。例えば、ピア A からピア B に {{ic|ping 10.10.10.2}} で ping が通るようにする必要があります。内部アドレスは {{ic|ip}} コマンドで作成する新しいアドレスで、WireGuard ネットワーク内で内部的に共有します。IP アドレスの {{ic|/24}} は [[wikipedia:Classless_Inter-Domain_Routing#CIDR_notation|CIDR]] です。&lt;br /&gt;
&lt;br /&gt;
==== 鍵の生成 ====&lt;br /&gt;
&lt;br /&gt;
{{Note|秘密鍵ファイルを保存するときは {{ic|600}} などのように厳しいパーミッションを使うことを推奨します。}}&lt;br /&gt;
&lt;br /&gt;
秘密鍵を作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey &amp;gt; privatekey&lt;br /&gt;
&lt;br /&gt;
公開鍵を作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ wg pubkey &amp;lt; privatekey &amp;gt; publickey&lt;br /&gt;
&lt;br /&gt;
もしくは、秘密鍵と公開鍵を同時に作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee privatekey | wg pubkey &amp;gt; publickey&lt;br /&gt;
&lt;br /&gt;
量子コンピュータが実用化された場合を考慮して、既存の公開鍵暗号に対称鍵暗号のレイヤーを追加するために事前共有鍵を生成することもできます:&lt;br /&gt;
&lt;br /&gt;
 # wg genpsk &amp;gt; preshared&lt;br /&gt;
&lt;br /&gt;
==== Peer A の設定 ====&lt;br /&gt;
&lt;br /&gt;
このピアでは UDP ポート 48574 を開いて内部・外部 IP アドレスと公開鍵を紐づけてピア B からの接続を許可します:&lt;br /&gt;
&lt;br /&gt;
 # ip link add dev wg0 type wireguard&lt;br /&gt;
 # ip addr add 10.0.0.1/24 dev wg0&lt;br /&gt;
 # wg set wg0 listen-port 48574 private-key ./privatekey&lt;br /&gt;
 # wg set wg0 peer [Peer B public key] persistent-keepalive 25 allowed-ips 10.0.0.2/32 endpoint 10.10.10.2:39814&lt;br /&gt;
 # ip link set wg0 up&lt;br /&gt;
&lt;br /&gt;
{{ic|[Peer B public key]}} は {{ic|1=EsnHH9m6RthHSs+sd9uM6eCHe/mMVFaRh93GYadDDnM=}} という形式で指定してください。{{ic|allowed-ips}} はトラフィックの送信を許可するアドレスのリストを指定してください。{{ic|allowed-ips 0.0.0.0/0}} であらゆるアドレスにトラフィックを送信できるようになります。&lt;br /&gt;
&lt;br /&gt;
==== Peer B の設定 ====&lt;br /&gt;
&lt;br /&gt;
ピア A とほとんど同じですが、wireguard デーモンで使用するのは UDP ポート 39814 でピア A からの接続だけを許可します:&lt;br /&gt;
&lt;br /&gt;
 # ip link add dev wg0 type wireguard&lt;br /&gt;
 # ip addr add 10.0.0.2/24 dev wg0&lt;br /&gt;
 # wg set wg0 listen-port 39814 private-key ./privatekey&lt;br /&gt;
 # wg set wg0 peer [Peer A public key] persistent-keepalive 25 allowed-ips 10.0.0.1/32 endpoint 10.10.10.1:48574&lt;br /&gt;
 # ip link set wg0 up&lt;br /&gt;
&lt;br /&gt;
==== 基本チェック ====&lt;br /&gt;
パラメータを付けずに wg コマンドを呼び出すことで現在の設定を確認できます。&lt;br /&gt;
&lt;br /&gt;
例えば、ピア A で実行すると以下のように表示されます:&lt;br /&gt;
&lt;br /&gt;
 peer-a$ wg&lt;br /&gt;
 interface: wg0&lt;br /&gt;
   public key: UguPyBThx/+xMXeTbRYkKlP0Wh/QZT3vTLPOVaaXTD8=&lt;br /&gt;
   private key: (hidden)&lt;br /&gt;
   listening port: 48574&lt;br /&gt;
 &lt;br /&gt;
 peer: 9jalV3EEBnVXahro0pRMQ+cHlmjE33Slo9tddzCVtCw=&lt;br /&gt;
   endpoint: 10.10.10.2:39814&lt;br /&gt;
   allowed ips: 10.0.0.2/32&lt;br /&gt;
&lt;br /&gt;
トンネルの末端にアクセスすることができるはずです:&lt;br /&gt;
  peer-a$ ping 10.0.0.2&lt;br /&gt;
&lt;br /&gt;
==== 設定の永続化 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|showconf}} を使うことで設定を保存できます:&lt;br /&gt;
 # wg showconf wg0 &amp;gt; /etc/wireguard/wg0.conf&lt;br /&gt;
 # wg setconf wg0 /etc/wireguard/wg0.conf&lt;br /&gt;
&lt;br /&gt;
==== ピア設定例 ====&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/wireguard/wg0.conf|2=&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.0.0.1/32&lt;br /&gt;
PrivateKey = [CLIENT PRIVATE KEY]&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
PublicKey = [SERVER PUBLICKEY]&lt;br /&gt;
AllowedIPs = 10.0.0.0/24, 10.123.45.0/24, 1234:4567:89ab::/48&lt;br /&gt;
Endpoint = [SERVER ENDPOINT]:51820&lt;br /&gt;
PersistentKeepalive = 25&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== systemd-networkd の設定例 ====&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/network/30-wg0.netdev|2=&lt;br /&gt;
[NetDev]&lt;br /&gt;
Name = wg0&lt;br /&gt;
Kind = wireguard&lt;br /&gt;
Description = Wireguard&lt;br /&gt;
&lt;br /&gt;
[WireGuard]&lt;br /&gt;
PrivateKey = [CLIENT PRIVATE KEY]&lt;br /&gt;
&lt;br /&gt;
[WireGuardPeer]&lt;br /&gt;
PublicKey = [SERVER PUBLIC KEY]&lt;br /&gt;
PresharedKey = [PRE SHARED KEY]&lt;br /&gt;
AllowedIPs = 10.0.0.0/24&lt;br /&gt;
Endpoint = [SERVER ENDPOINT]:51820&lt;br /&gt;
PersistentKeepalive = 25&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/network/30-wg0.network|2=&lt;br /&gt;
[Match]&lt;br /&gt;
Name = wg0&lt;br /&gt;
&lt;br /&gt;
[Network]&lt;br /&gt;
Address = 10.0.0.3/32&lt;br /&gt;
DNS = 10.0.0.1&lt;br /&gt;
&lt;br /&gt;
[Route]&lt;br /&gt;
Gateway = 10.0.0.1&lt;br /&gt;
Destination = 10.0.0.0/24&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== VPN サーバーの設定 ==&lt;br /&gt;
&lt;br /&gt;
このセクションでは [[OpenVPN]] などと同じように暗号化されたトンネルを使ってサーバー・ネットワークリソースにアクセスできるようにするため、WireGuard の「サーバー」と汎用的な「クライアント」を設定します。サーバーは Linux で稼働させますがクライアントのプラットフォームは複数選択できます (WireGuard プロジェクトは Linux ネイティブや macOS のソフトウェアに加えて iOS や Android プラットフォームのアプリも提供しています)。詳しくは公式プロジェクトの [https://www.wireguard.com/install/ インストールリンク] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
サーバー側のマシンではまず IPv4 フォワーディングを有効にしてください:&lt;br /&gt;
&lt;br /&gt;
 # sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続化するには {{ic|/etc/sysctl.d/99-sysctl.conf}} に {{ic|1=net.ipv4.ip_forward = 1}} を追加します。&lt;br /&gt;
&lt;br /&gt;
インターネットに接続する場合は[[ファイアウォール]]を設定することが推奨されます:&lt;br /&gt;
* WireGuard が動作するポートの UDP トラフィックを許可してください (例えば 51820/udp のトラフィックを許可)。&lt;br /&gt;
* WireGurad の設定 {{ic|/etc/wireguard/wg0.conf}} に転送ポリシーを記述しない場合はファイアウォールで転送ポリシーを設定してください。以下の例はそのまま動作します。&lt;br /&gt;
&lt;br /&gt;
最後に、WAN からアクセスできるようにするため WireGuard のポートをルーターからサーバーの LAN の IP に転送するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 鍵の生成 ===&lt;br /&gt;
サーバーとクライアントの鍵を[[#鍵の生成]]で説明しているように生成してください。&lt;br /&gt;
&lt;br /&gt;
=== サーバーの設定 ===&lt;br /&gt;
サーバーの設定ファイルを作成:&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;PresharedKey&#039;&#039; 行は任意です。使用する場合、事前共有鍵をサーバーとクライアントの設定ファイルで設定する必要があります。詳しくは wg の [[man ページ]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/wireguard/wg0.conf|2=&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.200.200.1/24&lt;br /&gt;
SaveConfig = true&lt;br /&gt;
ListenPort = 51820&lt;br /&gt;
PrivateKey = [SERVER PRIVATE KEY]&lt;br /&gt;
MTU = 1420&lt;br /&gt;
&lt;br /&gt;
# note - substitute &#039;&#039;eth0&#039;&#039; in the following lines to match the Internet-facing interface&lt;br /&gt;
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
# client foo&lt;br /&gt;
PublicKey = [FOO&#039;s PUBLIC KEY]&lt;br /&gt;
PresharedKey = [PRE-SHARED KEY]&lt;br /&gt;
AllowedIPs = 10.200.200.2/32&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
# client bar&lt;br /&gt;
PublicKey = [BAR&#039;s PUBLIC KEY]&lt;br /&gt;
PresharedKey = [PRE-SHARED KEY]&lt;br /&gt;
AllowedIPs = 10.200.200.3/32&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|必要に応じて同じような形式でピアを追加してください。}}&lt;br /&gt;
&lt;br /&gt;
インターフェイスは手動あるいは [[systemctl]] で制御できます。&lt;br /&gt;
&lt;br /&gt;
{{ic|wg-quick up wg0}} でインターフェイスが立ち上がり {{ic|wg-quick down wg0}} で終了します。&lt;br /&gt;
&lt;br /&gt;
systemctl で制御したい場合、{{ic|wg-quick@.service}} を[[起動]]・[[有効化]]してください。&amp;quot;@&amp;quot; 記号の後ろにサーバーの設定の名前を入力してください。例:&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
=== クライアントの設定 ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定ファイルを作成:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=foo.conf|2=&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.200.200.2/24&lt;br /&gt;
PrivateKey = [FOO&#039;s PRIVATE KEY]&lt;br /&gt;
DNS = 10.200.200.1&lt;br /&gt;
MTU = 1420&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
PublicKey = [SERVER PUBLICKEY]&lt;br /&gt;
PresharedKey = [PRE-SHARED KEY]&lt;br /&gt;
AllowedIPs = 0.0.0.0/0&lt;br /&gt;
Endpoint = my.ddns.address.com:51820&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|1=bar.conf|2=&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.200.200.3/24&lt;br /&gt;
PrivateKey = [BAR&#039;s PRIVATE KEY]&lt;br /&gt;
DNS = 10.200.200.1&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
PublicKey = [SERVER PUBLICKEY]&lt;br /&gt;
PresharedKey = [PRE-SHARED KEY]&lt;br /&gt;
AllowedIPs = 0.0.0.0/0&lt;br /&gt;
Endpoint = my.ddns.address.com:51820&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=設定ファイルを作るときは、公開・秘密鍵と &#039;&#039;Address =&#039;&#039; の値を適当に置き換えてください。}}&lt;br /&gt;
&lt;br /&gt;
クライアントがスマートフォンなどの場合、{{Pkg|qrencode}} を使って設定を共有することができます:&lt;br /&gt;
 $ qrencode -t ansiutf8 &amp;lt; foo.conf&lt;br /&gt;
&lt;br /&gt;
{{Note|[[NetworkManager]] を使用している場合、{{ic|NetworkManager-wait-online.service}} を、[[systemd-networkd]] を使用している場合、{{ic|systemd-networkd-wait-online.service}} を有効化することでネットワーク接続が有効になってからサービスが実行されるようになります。}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== ルートが定期的にリセットされる ===&lt;br /&gt;
&lt;br /&gt;
[[NetworkManager]] が WireGuard のインターフェイスを管理しないようにしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/NetworkManager/conf.d/unmanaged.conf|2=&lt;br /&gt;
[keyfile]&lt;br /&gt;
unmanaged-devices=interface-name:wg0&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
=== NetworkManager で切断される ===&lt;br /&gt;
&lt;br /&gt;
デスクトップの場合、全てのトラフィックを WireGuard のインターフェイス経由にすると切断が発生することがあります。アクセスポイントに新しく接続してしばらくした後に切断が発生します。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは &#039;&#039;wg-quick&#039;&#039; は [[openresolv]] などの resolvconf プロバイダを使用して新しい [[DNS]] エントリを登録します (設定ファイルの {{ic|DNS}} キーワード)。しかしながら [[NetworkManager]] はデフォルトでは resolvconf を使用しません。新しい [[DHCP]] リースが取得されるたびに [[NetworkManager]] は DHCP によって提供されたアドレスで全体の DNS アドレスを上書きします。&lt;br /&gt;
&lt;br /&gt;
==== resolvconf を使う ====&lt;br /&gt;
&lt;br /&gt;
システムで resolvconf を使っていて接続が切れる場合、NetworkManager が resolvconf を使うように設定してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/NetworkManager/conf.d/rc-manager.conf|2=&lt;br /&gt;
[main]&lt;br /&gt;
rc-manager=resolvconf&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== dnsmasq を使う ====&lt;br /&gt;
&lt;br /&gt;
[[Dnsmasq#openresolv]] を見てください。&lt;br /&gt;
&lt;br /&gt;
==== systemd-resolved を使う ====&lt;br /&gt;
&lt;br /&gt;
2018年9月時点では、{{Pkg|systemd-resolvconf}} による resolvconf 互換モードは &#039;&#039;wg-quick&#039;&#039; で機能しません。ただし {{ic|PostUp}} フックを使うことで &#039;&#039;wg-quick&#039;&#039; から [[systemd-resolved]] を使用することはできます。まず NetworkManager で &#039;&#039;systemd-resolved&#039;&#039; を使うように設定: [[NetworkManager#systemd-resolved]]。それからトンネルの設定を変更:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/wireguard/wg0.conf|2=&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.0.0.2/24  # The client IP from wg0server.conf with the same subnet mask&lt;br /&gt;
PrivateKey = [CLIENT PRIVATE KEY]&lt;br /&gt;
PostUp = resolvectl domain %i &amp;quot;~.&amp;quot;; resolvectl dns %i 10.0.0.1; resolvectl dnssec %i yes&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
PublicKey = [SERVER PUBLICKEY]&lt;br /&gt;
AllowedIPs = 0.0.0.0/0, ::0/0&lt;br /&gt;
Endpoint = [SERVER ENDPOINT]:51820&lt;br /&gt;
PersistentKeepalive = 25&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しく利用可能になった DNS サーバーに優先度を与えるためにドメイン名は {{ic|&amp;quot;~.&amp;quot;}} に設定する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|wg0}} が落ちたときに &#039;&#039;systemd-resolved&#039;&#039; は自動的に全てのパラメータを戻すため {{ic|PostDown}} キーは必要ありません。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 秘密鍵を暗号化して保存 ===&lt;br /&gt;
&lt;br /&gt;
設定ファイルの [Interface] セクションの PrivateKey 行を以下のように置き換えることで [[pass]] を使って秘密鍵を暗号化できます:&lt;br /&gt;
&lt;br /&gt;
 PostUp = wg set %i private-key &amp;lt;(su user -c &amp;quot;export PASSWORD_STORE_DIR=/path/to/your/store/; pass WireGuard/private-keys/%i&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
user はユーザー名に置き換えてください。詳しくは {{man|8|wg-quick}} を参照。&lt;br /&gt;
&lt;br /&gt;
=== IP が変わるエンドポイント ===&lt;br /&gt;
&lt;br /&gt;
サーバーのドメインの解決後、WireGuard は DNS で再度変更をチェックすることはありません [https://lists.zx2c4.com/pipermail/wireguard/2017-November/002028.html]。&lt;br /&gt;
&lt;br /&gt;
WireGuard サーバーの IP アドレスが DHCP, Dyndns, IPv6 などによって頻繁に変更された場合、WireGuard クライアントは接続を失います。その際 {{ic|wg set &amp;quot;$INTERFACE&amp;quot; peer &amp;quot;$PUBLIC_KEY&amp;quot; endpoint &amp;quot;$ENDPOINT&amp;quot;}} などのようにエンドポイントを更新しなくてはなりません。&lt;br /&gt;
&lt;br /&gt;
また、エンドポイントがアドレスを変更したとき (例えば新しいプロバイダ・データセンターに移行した場合)、DNS を更新するだけでは不十分となるため、DNS ベースのセットアップでは reresolve-dns を定期的に実行する必要が出てきます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|wireguard-tools}} には WG の設定ファイルを読み込んでエンドポイントのアドレスを自動的にリセットするスクリプト {{ic|/usr/share/wireguard/examples/reresolve-dns/reresolve-dns.sh}} が含まれています。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/wireguard/examples/reresolve-dns/reresolve-dns.sh /etc/wireguard/wg.conf}} を定期的に実行することで IP が変わったエンドポイントから復旧できます。&lt;br /&gt;
&lt;br /&gt;
systemd タイマーを使って30秒ごとに WireGuard のエンドポイントを更新する例 [https://git.zx2c4.com/WireGuard/tree/contrib/examples/reresolve-dns/README]:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/wireguard_reresolve-dns.timer|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Periodically reresolve DNS of all WireGuard endpoints&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=*:*:0/30&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/wireguard_reresolve-dns.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Reresolve DNS of all WireGuard endpoints&lt;br /&gt;
Wants=network-online.target&lt;br /&gt;
After=network-online.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/bin/sh -c &#039;for i in /etc/wireguard/*.conf; do /usr/share/wireguard/examples/reresolve-dns/reresolve-dns.sh &amp;quot;\$i&amp;quot;; done&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記ファイルを作成したら {{ic|wireguard_reresolve-dns.timer}} を[[起動]]・[[有効化]]してください。&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=OVMF_%E3%81%AB%E3%82%88%E3%82%8B_PCI_%E3%83%91%E3%82%B9%E3%82%B9%E3%83%AB%E3%83%BC&amp;diff=19465</id>
		<title>OVMF による PCI パススルー</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=OVMF_%E3%81%AB%E3%82%88%E3%82%8B_PCI_%E3%83%91%E3%82%B9%E3%82%B9%E3%83%AB%E3%83%BC&amp;diff=19465"/>
		<updated>2021-03-03T18:32:45Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:仮想化]]&lt;br /&gt;
[[en:PCI passthrough via OVMF]]&lt;br /&gt;
[[zh-hans:PCI passthrough via OVMF]]&lt;br /&gt;
Open Virtual Machine Firmware ([https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF]) は仮想マシンで UEFI を使えるようにするプロジェクトです。Linux 3.9 以上と新しいバージョンの [[QEMU]] では、グラフィックカードをパススルーすることが可能で、仮想マシンでネイティブと同じグラフィック性能を発揮することができます。&lt;br /&gt;
&lt;br /&gt;
デスクトップコンピュータに使用していない GPU が接続されている場合 (内蔵 GPU や古い OEM カードでもかまいません、ブランドが一致している必要はありません)、ハードウェアがサポートしていれば ([[#要件]]を参照)、あらゆる OS の仮想マシンで専用 GPU として（ほぼ）最大限の性能を活用できます。技術的な詳細は [https://www.linux-kvm.org/images/b/b3/01x09b-VFIOandYou-small.pdf こちらのプレゼンテーション (pdf)] を見てください。&lt;br /&gt;
&lt;br /&gt;
== 要件 ==&lt;br /&gt;
VGA パススルーでは最先端の技術を使っているため、あなたのハードウェアでは使用できない可能性があります。パススルーを行うには以下の要件が満たされていなければなりません:&lt;br /&gt;
&lt;br /&gt;
* CPU がハードウェア仮想化 (KVM) と IOMMU (パススルー) をサポートしていること。&lt;br /&gt;
** [https://ark.intel.com/ja/Search/FeatureFilter?productType=processors&amp;amp;VTD=true Intel の対応 CPU リスト (Intel VT-x と Intel VT-d)]&lt;br /&gt;
** Bulldozer 世代以降 (Zen も含む) の AMD 製 CPU は全て対応しています。&lt;br /&gt;
*** K10 世代 (2007年) の CPU は IOMMU を搭載していないため、[https://support.amd.com/TechDocs/43403.pdf#page=18 890FX] や [https://support.amd.com/TechDocs/48691.pdf#page=21 990FX] チップセットが搭載されたマザーボードが必要です。&lt;br /&gt;
* マザーボードが IOMMU をサポートしていること。&lt;br /&gt;
** チップセットと BIOS の両方が対応している必要があります。対応しているかどうかすぐに判断することはできませんが、[https://wiki.xen.org/wiki/VTd_HowTo Xen wiki の対応ハードウェアリスト] や [[wikipedia:List_of_IOMMU-supporting_hardware|Wikipedia の対応リスト]]が存在します。&lt;br /&gt;
* ゲスト GPU ROM が UEFI をサポートしていること。&lt;br /&gt;
** [https://www.techpowerup.com/vgabios/ このリストに載っている ROM] に使用している GPU が存在し UEFI をサポートしていると書かれていれば、問題ありません。2012年以降の GPU はサポートされているはずです。Windows 8 との互換性があると売り出すには UEFI のサポートが要件だと Microsoft が決めたためです。&lt;br /&gt;
&lt;br /&gt;
使用していないモニターやマウス、キーボードがあれば、それも仮想マシンに割り当てることができます (GPU はディスプレイが接続されていないと何も出力することができず Spice 接続では性能が上がりません)。何か問題が発生した場合でも、スペアの機材があればホストマシンは制御できます。&lt;br /&gt;
&lt;br /&gt;
==IOMMU のセットアップ==&lt;br /&gt;
{{Note|&lt;br /&gt;
* IOMMU は Intel VT-d と AMD-Vi の総称です。&lt;br /&gt;
* VT-d は &#039;&#039;ダイレクト I/O 向けインテル VT&#039;&#039; (&#039;&#039;Intel Virtualization Technology for Directed I/O&#039;&#039;) の略語です。&#039;&#039;インテル バーチャライゼーション・テクノロジー&#039;&#039; (&#039;&#039;Intel Virtualization Technology&#039;&#039;) の VT-x と混同しないようにしてください。 VT-x は単独のハードウェアプラットフォームを複数の「仮想」プラットフォームとして機能することを可能にする機能で、対して VT-d はシステムのセキュリティと信頼性を向上させると共に仮想化環境での I/O デバイスのパフォーマンスを向上させる機能です。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
IOMMU によって PCI パススルーや障害または悪意あるデバイスからのメモリ保護機能を使うことができます。[[Wikipedia:Input-output memory management unit#Advantages]] や [https://www.quora.com/Memory-Management-computer-programming/Could-you-explain-IOMMU-in-plain-English Memory Management (computer programming): Could you explain IOMMU in plain English?] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===IOMMU の有効化===&lt;br /&gt;
AMD-Vi/Intel VT-d が CPU によってサポートされていること、BIOS の設定で AMD-VI/VT-d が有効化されていることを確認してください。通常は他の CPU 機能と一緒に設定が並んでいるはずです (オーバークロック関連のメニューに存在することもあります)。設定における名前は機能名 (&amp;quot;Vt-d&amp;quot; あるいは &amp;quot;AMD-Vi&amp;quot;) だったり、あるいは &amp;quot;Virtualization technology&amp;quot; などの曖昧な単語だったりします。マニュアルに載っていない場合もあります。&lt;br /&gt;
&lt;br /&gt;
使用している CPU に応じて適切な[[カーネルパラメータ]]を設定し、 IOMMU を有効にしてください:&lt;br /&gt;
&lt;br /&gt;
* Intel 製の CPU (VT-d) であれば {{ic|1=intel_iommu=on}} を設定&lt;br /&gt;
* AMD 製の CPU (AMD-Vi) であれば {{ic|1=amd_iommu=on}} を設定&lt;br /&gt;
&lt;br /&gt;
{{ic|1=iommu=pt}} パラメータも追加してください。このパラメータによって Linux がパススルーしないデバイスに触らないようにすることができます。&lt;br /&gt;
&lt;br /&gt;
再起動して、dmesg で IOMMU が有効になっていることを確認してください:&lt;br /&gt;
{{hc|dmesg&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;grep -e DMAR -e IOMMU|&lt;br /&gt;
[    0.000000] ACPI: DMAR 0x00000000BDCB1CB0 0000B8 (v01 INTEL  BDW      00000001 INTL 00000001)&lt;br /&gt;
[    0.000000] Intel-IOMMU: enabled&lt;br /&gt;
[    0.028879] dmar: IOMMU 0: reg_base_addr fed90000 ver 1:0 cap c0000020660462 ecap f0101a&lt;br /&gt;
[    0.028883] dmar: IOMMU 1: reg_base_addr fed91000 ver 1:0 cap d2008c20660462 ecap f010da&lt;br /&gt;
[    0.028950] IOAPIC id 8 under DRHD base  0xfed91000 IOMMU 1&lt;br /&gt;
[    0.536212] DMAR: No ATSR found&lt;br /&gt;
[    0.536229] IOMMU 0 0xfed90000: using Queued invalidation&lt;br /&gt;
[    0.536230] IOMMU 1 0xfed91000: using Queued invalidation&lt;br /&gt;
[    0.536231] IOMMU: Setting RMRR:&lt;br /&gt;
[    0.536241] IOMMU: Setting identity map for device 0000:00:02.0 [0xbf000000 - 0xcf1fffff]&lt;br /&gt;
[    0.537490] IOMMU: Setting identity map for device 0000:00:14.0 [0xbdea8000 - 0xbdeb6fff]&lt;br /&gt;
[    0.537512] IOMMU: Setting identity map for device 0000:00:1a.0 [0xbdea8000 - 0xbdeb6fff]&lt;br /&gt;
[    0.537530] IOMMU: Setting identity map for device 0000:00:1d.0 [0xbdea8000 - 0xbdeb6fff]&lt;br /&gt;
[    0.537543] IOMMU: Prepare 0-16MiB unity mapping for LPC&lt;br /&gt;
[    0.537549] IOMMU: Setting identity map for device 0000:00:1f.0 [0x0 - 0xffffff]&lt;br /&gt;
[    2.182790] [drm] DMAR active, disabling use of stolen memory}}&lt;br /&gt;
&lt;br /&gt;
===グループが正しいことを確認===&lt;br /&gt;
&lt;br /&gt;
以下のスクリプトを使うことで PCI デバイスが IOMMU グループにどのようにマッピングされたか確認できます。何も出力が返ってこない場合、IOMMU のサポートが有効になっていないかハードウェアが IOMMU をサポートしていないかのどちらかです。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 shopt -s nullglob&lt;br /&gt;
 for d in /sys/kernel/iommu_groups/*/devices/*; do &lt;br /&gt;
     n=${d#*/iommu_groups/*}; n=${n%%/*}&lt;br /&gt;
     printf &#039;IOMMU Group %s &#039; &amp;quot;$n&amp;quot;&lt;br /&gt;
     lspci -nns &amp;quot;${d##*/}&amp;quot;&lt;br /&gt;
 done;&lt;br /&gt;
&lt;br /&gt;
出力の例:&lt;br /&gt;
&lt;br /&gt;
 IOMMU Group 0 00:00.0 Host bridge [0600]: Intel Corporation 2nd Generation Core Processor Family DRAM Controller [8086:0104] (rev 09)&lt;br /&gt;
 IOMMU Group 1 00:16.0 Communication controller [0780]: Intel Corporation 6 Series/C200 Series Chipset Family MEI Controller #1 [8086:1c3a] (rev 04)&lt;br /&gt;
 IOMMU Group 2 00:19.0 Ethernet controller [0200]: Intel Corporation 82579LM Gigabit Network Connection [8086:1502] (rev 04)&lt;br /&gt;
 IOMMU Group 3 00:1a.0 USB controller [0c03]: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 [8086:1c2d] (rev  &lt;br /&gt;
 ...&lt;br /&gt;
IOMMU グループは仮想マシンにパススルーすることができる一番小さい単位の物理デバイスのセットです。例えば、上記の例の場合、06:00.0 の GPU と 6:00.1 のオーディオコントローラは IOMMU グループ13に属しており、両方一緒にしかパススルーすることができません。フロントの USB コントローラは USB 拡張コントローラ (グループ10) やリアの USB コントローラ (グループ4) と分かれているグループ (グループ2) なので、[[#USB コントローラ|他のデバイスに影響を与えないで仮想マシンにパススルーすることができます]]。&lt;br /&gt;
&lt;br /&gt;
===注意事項===&lt;br /&gt;
====独立していない CPU ベースの PCIe スロットにゲスト GPU を接続した場合====&lt;br /&gt;
全ての PCI-E スロットは同じではありません。ほとんどのマザーボードでは PCIe スロットには CPU 由来のものと PCH 由来のものがあります。CPU によっては、プロセッサ由来の PCIe スロットは隔離することができず、その場合 PCI スロットは接続されているデバイスと一緒にグループ化されてしまいます。&lt;br /&gt;
&lt;br /&gt;
 IOMMU Group 1 00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port (rev 09)&lt;br /&gt;
 IOMMU Group 1 01:00.0 VGA compatible controller: NVIDIA Corporation GM107 [GeForce GTX 750] (rev a2)&lt;br /&gt;
 IOMMU Group 1 01:00.1 Audio device: NVIDIA Corporation Device 0fbc (rev a1)&lt;br /&gt;
&lt;br /&gt;
上記のようにゲスト GPU しか含まれていない場合は問題ありません。他の PCIe スロットに接続した場合や CPU や PCH の配置によって、同じグループに他のデバイスが含まれる場合、そのデバイスも一緒にパススルーすることになります。仮想マシンにデバイスをパススルーしても問題ない場合は次に進んでください。そうでない場合、他の PCIe スロットに GPU を接続してみて他のデバイスと分離できないか試してみてください。もしくは ACS 上書きパッチをインストールする方法もありますが、こちらは欠点があります。詳しくは [[#IOMMU グループのバイパス (ACS 上書きパッチ)]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{note|他のデバイスと一緒にグループ化した場合、起動時に pci のルートポートとブリッジを vfio に紐付けたり VM に追加してはいけません。}}&lt;br /&gt;
&lt;br /&gt;
==GPU の分離==&lt;br /&gt;
デバイスを仮想マシンに割り当てるには、ホストマシンとの干渉を避けるためにこのデバイスと同じ IOMMU グループを共有する全てのデバイスがスタブドライバまたは VFIO ドライバに置き換えられている必要があります。この処理はほとんどのデバイスでは VM が起動する直前に行われます。&lt;br /&gt;
&lt;br /&gt;
しかし、GPU ドライバーは巨大で複雑なため、動的な再バインドはあまりサポートされておらず、ホストの GPU を仮想マシンにお互いのドライバーが衝突すること無く透過的にパススルーすることは通常できません。 VM が起動する前に代わりのドライバーに GPU を手動でバインドし、他のドライバーが GPU を使用できないようにすることを推奨します。&lt;br /&gt;
&lt;br /&gt;
続くセクションでは、代わりのドライバーがブートプロセスの早期にバインドされるように GPU を構成する詳細な方法を記載します。これにより VM が要求するかドライバーがスイッチバックされるまでデバイスは活動を停止します。これは一旦システムが完全にオンラインになってからドライバを切り替えるよりも問題が少なく、好ましい方法と言えます。2つの方法が存在しますが、使用しているカーネルがサポートしている場合は vfio-pci を使用することが推奨されます。&lt;br /&gt;
&lt;br /&gt;
{{warning|設定後にマシンを再起動すると、設定を解除しないかぎりホストから GPU は使えなくなります。再起動する前にホストで使用する GPU が正しく (マザーボードがホスト GPU を使って表示するように) 設定されているか確認してください。}}&lt;br /&gt;
&lt;br /&gt;
Linux 4.1 から、カーネルには vfio-pci が含まれており、pci-stub と同じような機能を持ちながら、使用していないときはデバイスを D3 状態にするなどの機能が追加されています。&lt;br /&gt;
&lt;br /&gt;
vfio-pci は基本的に PCI デバイスを ID で指定するため、パススルーしたいデバイスの ID を指定する必要があります。以下の IOMMU グループの場合、vfio-pci を {{ic|10de:13c2}} と {{ic|10de:0fbb}} にバインドします。&lt;br /&gt;
&lt;br /&gt;
 IOMMU Group 13 06:00.0 VGA compatible controller: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)&lt;br /&gt;
 IOMMU Group 13 06:00.1 Audio device: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)}}&lt;br /&gt;
&lt;br /&gt;
{{note|&lt;br /&gt;
* ホスト GPU とゲスト GPU のベンダーとデバイス ID が同じ場合 (同じ型番の GPU を使っている場合)、ベンダーとデバイス ID を使ってデバイスを分離させることはできません。そのような場合は[[#ゲストとホストで同じ GPU を使う|ゲストとホストで同じ GPU を使う]]のセクションを読んでください。&lt;br /&gt;
* [[#独立していない CPU ベースの PCIe スロットにゲスト GPU を接続した場合]]にあるように、PCI のルートポートが IOMMU グループに属している場合、ID を {{ic|vfio-pci}} に指定してはいけません。ルートポートを機能させるにはホスト側に割り当てたままにする必要があります。グループ内の他のデバイスも {{ic|vfio-pci}} にバインドされてしまいます。}}&lt;br /&gt;
&lt;br /&gt;
=== モジュールとして vfio-pci をロード ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|linux}} カーネルには組み込みモジュールとして vfio-pci が含まれていないため、設定でロードさせる必要があります。&lt;br /&gt;
&lt;br /&gt;
ベンダーとデバイス ID を vfio-pci に渡されるデフォルトパラメータに追加します:&lt;br /&gt;
{{hc|1=/etc/modprobe.d/vfio.conf|2=options vfio-pci ids=10de:13c2,10de:0fbb}}&lt;br /&gt;
&lt;br /&gt;
上記の設定だけでは vfio-pci が他のグラフィックドライバーよりも前にロードされるとは限りません。必ずロードされるようにするには、カーネルイメージの中で静的にバインドされるようにする必要があります。{{ic|vfio_pci}}, {{ic|vfio}}, {{ic|vfio_iommu_type1}}, {{ic|vfio_virqfd}} を [[mkinitcpio]] にこの順番で追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(... vfio_pci vfio vfio_iommu_type1 vfio_virqfd ...)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|[[Kernel_Mode_Setting#Early_KMS_start|初期モードセッティング]]のために他のドライバー ({{ic|nouveau}}, {{ic|radeon}}, {{ic|amdgpu}}, {{ic|i915}} など) をロードしている場合、上記の VFIO モジュールが先にロードされるようにしてください。}}&lt;br /&gt;
&lt;br /&gt;
さらに、{{ic|mkinitcpio.conf}} の HOOKS リストに modconf フックを追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
HOOKS=(... modconf ...)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
新しいモジュールを initramfs に追加したら、[[initramfs を再生成する]]必要があります。{{ic|/etc/modprobe.d/vfio.conf}} でデバイスの ID を変更した場合も、initramfs を再生成してください。パラメータは起動の初期段階で initramfs で指定される必要があります。&lt;br /&gt;
&lt;br /&gt;
=== カーネルに vfio-pci が組み込まれている場合 ===&lt;br /&gt;
&lt;br /&gt;
vfio-pci モジュールを組み込んだカーネルを使っている場合、以下のように[[カーネルパラメータ]]でデバイス ID を指定することで GPU を分離できます:&lt;br /&gt;
&lt;br /&gt;
 vfio-pci.ids=10de:13c2,10de:0fbb&lt;br /&gt;
&lt;br /&gt;
=== 設定を確認 ===&lt;br /&gt;
&lt;br /&gt;
再起動して vfio-pci が正しくロードされ適切なデバイスがバインドされていることを確認:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ dmesg {{!}} grep -i vfio|&lt;br /&gt;
[    0.329224] VFIO - User Level meta-driver version: 0.3&lt;br /&gt;
[    0.341372] vfio_pci: add [10de:13c2[ffff:ffff]] class 0x000000/00000000&lt;br /&gt;
[    0.354704] vfio_pci: add [10de:0fbb[ffff:ffff]] class 0x000000/00000000&lt;br /&gt;
[    2.061326] vfio-pci 0000:06:00.0: enabling device (0100 -&amp;gt; 0103)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|vfio.conf}} の全てのデバイス (期待するデバイスであっても) が dmesg に出力される必要はありません。起動時にデバイスが出力に現れなくてもゲスト VM から問題なく使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -nnk -d 10de:13c2|&lt;br /&gt;
06:00.0 VGA compatible controller: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)&lt;br /&gt;
	Kernel driver in use: vfio-pci&lt;br /&gt;
	Kernel modules: nouveau nvidia}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lspci -nnk -d 10de:0fbb|&lt;br /&gt;
06:00.1 Audio device: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)&lt;br /&gt;
	Kernel driver in use: vfio-pci&lt;br /&gt;
	Kernel modules: snd_hda_intel}}&lt;br /&gt;
&lt;br /&gt;
==OVMF によるゲスト VM のセットアップ==&lt;br /&gt;
OVMF は QEMU 仮想マシン用のオープンソース UEFI ファームウェアです。SeaBIOS を使うことでも PCI パススルーと同じような結果を得ることはできますが、セットアップ手順が異なります。一般的にはハードウェアがサポートしているのであれば EFI を使用する方法を推奨します。&lt;br /&gt;
&lt;br /&gt;
===libvirt の設定===&lt;br /&gt;
[[libvirt]] は様々な仮想化ユーティリティのラッパーであり、仮想マシンの設定とデプロイを簡単にします。KVM と QEMU の場合、フロントエンドを使用することで QEMU 用にパーミッションを設定する必要がなくなり簡単に様々なデバイスを仮想マシンに追加・削除できます。ラッパーと名乗ってはいますが、QEMU の最新機能全てをサポートしているわけではありません。QEMU の引数を追加するためにラッパースクリプトを使用する必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu}}, {{Pkg|libvirt}}, {{Pkg|ovmf}}{{Broken package link|置換パッケージ: {{Pkg|edk2-ovmf}}}}, {{Pkg|virt-manager}} をインストールしてから、OVMF ファームウェアイメージとランタイム変数テンプレートのパスを libvirt の設定に追加して、{{ic|virt-install}} や {{ic|virt-manager}} が認識できるようにしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/libvirt/qemu.conf|2=&lt;br /&gt;
nvram = [&lt;br /&gt;
	&amp;quot;/usr/share/ovmf/x64/OVMF_CODE.fd:/usr/share/ovmf/x64/OVMF_VARS.fd&amp;quot;&lt;br /&gt;
]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
設定後、{{ic|libvirtd.service}} とログ出力コンポーネント {{ic|virtlogd.socket}} を[[起動]]・[[有効化]]します。&lt;br /&gt;
&lt;br /&gt;
===ゲスト OS のセットアップ===&lt;br /&gt;
{{ic|virt-manager}} による仮想マシンの設定は画面上の指示に従うだけで完了します。ただし、以下のステップでは特別な注意を払う必要があります:&lt;br /&gt;
* 仮想マシンの作成ウィザードで VM の名前を付けるとき、&amp;quot;Customize before install&amp;quot; チェックボックスにチェックを入れてください。&lt;br /&gt;
* &amp;quot;Overview&amp;quot; セクションで、ファームウェアを &amp;quot;UEFI&amp;quot; に設定してください [https://i.imgur.com/73r2ctM.png]。オプションがグレーになっている場合、{{ic|/etc/libvirt/qemu.conf}} でファームウェアの場所が正しく指定されているか確認してください。修正した後 {{ic|libvirtd.service}} を再起動してください。&lt;br /&gt;
* &amp;quot;CPUs&amp;quot; セクションで、CPU モデルを &amp;quot;host-passthrough&amp;quot; に変更してください。リストに存在しない場合、手動で入力してください。これで libvirt が CPU の機能を実際の CPU と同じように反映するようになって CPU が正しく認識されるようになります。変更しないと、一部のアプリケーションで CPU のモデルが不明だとエラーが発生します。&lt;br /&gt;
* IO のオーバーヘッドを抑えたい場合、&amp;quot;Add Hardware&amp;quot; から &amp;quot;VirtIO SCSI&amp;quot; モデルの SCSI ドライブのコントローラを追加してください。それからデフォルトの IDE ディスクを SCSI ディスクに変更して作成したコントローラーにバインドしてください。&lt;br /&gt;
** Windows の仮想マシンはデフォルトでは SCSI ドライブを認識しないため、[https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/ こちら] からドライバーが含まれている ISO をダウンロードして IDE (あるいは Windows 7 以上の場合は SATA) の CD-ROM ストレージデバイスを作成してダウンロードした ISO にリンクしてください。この設定を行わないとインストール時に Windows がディスクを認識できません。Windows をインストールするディスクを選択するときは、&#039;&#039;vioscsi&#039;&#039; 下の CD-ROM に含まれているドライバーをロードしてください。&lt;br /&gt;
&lt;br /&gt;
他のインストールは通常と同じです。標準の QXL ビデオアダプタをウィンドウで実行します。現時点では、仮想デバイスのためのドライバーをインストールする必要はありません。ほとんどが後で削除されるためです。ゲスト OS のインストールが完了したら、仮想マシンをオフにしてください。最初の VM 起動時にインストールが始まらず UEFI メニューに戻ってしまう場合があります。場合によっては正しい ISO ファイルが自動的に認識されないために、起動ドライブを手動で指定する必要があります。 exit とタイプして &amp;quot;boot manager&amp;quot; に移動するとデバイス選択メニューに入ることができます。&lt;br /&gt;
&lt;br /&gt;
===PCI デバイスの接続===&lt;br /&gt;
インストールが完了したら、libvirt でハードウェアの詳細情報を編集して spice チャンネルや仮想ディスプレイ、QXL ビデオアダプタ、マウスやキーボード、USB タブレットデバイスのエミュレートなどの仮想デバイスを削除できます。入力デバイスがなくなるので、仮想マシンに USB ホストデバイスをバインドする場合、ゲストに何かあったときは最低でもひとつのマウスやキーボードをホストに割り当ててください。ここで、先に分離しておいた PCI デバイスを接続することができます。&amp;quot;Add Hardware&amp;quot; をクリックしてパススルーしたい PCI Host Device を選択してください。問題がなければ、GPU に接続されたディスプレイが OVMF のスプラッシュ画面を表示して通常通りに VM が起動します。そこから VM のドライバーの設定をおこなってください。&lt;br /&gt;
&lt;br /&gt;
=== Evdev でキーボード・マウスを接続 ===&lt;br /&gt;
&lt;br /&gt;
ゲスト用のスペアのマウスやキーボードを持っておらず、Spice のオーバーヘッドを避けたい場合、evdev を設定することでマウスとキーボードのコントロールをホストとゲストで切り替えることができます。まず、{{ic|/dev/input/by-id/}} からキーボードとマウスのデバイスを探してください。マウスやキーボードに複数のデバイスが関連付けられている場合、{{ic|cat /dev/input/by-id/&#039;&#039;device_id&#039;&#039;}} を試してみてキーを打ったりマウスを動かして入力が通ったかどうか確認してください。それからデバイスを設定に追加:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
 &amp;lt;qemu:commandline&amp;gt;&lt;br /&gt;
 &amp;lt;qemu:arg value=&#039;-object&#039;/&amp;gt;&lt;br /&gt;
 &amp;lt;qemu:arg value=&#039;input-linux,id=mouse1,evdev=/dev/input/by-id/MOUSE_NAME&#039;/&amp;gt;&lt;br /&gt;
 &amp;lt;qemu:arg value=&#039;-object&#039;/&amp;gt;&lt;br /&gt;
 &amp;lt;qemu:arg value=&#039;input-linux,id=kbd1,evdev=/dev/input/by-id/KEYBOARD_NAME,grab_all=on,repeat=on&#039;/&amp;gt;&lt;br /&gt;
 &amp;lt;/qemu:commandline&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|MOUSE_NAME}} と {{ic|KEYBOARD_NAME}} は適切なデバイス id に置き換えてください。それから qemu の設定にデバイスを記述して、ユーザーとグループが入力デバイスにアクセスできるように設定:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/libvirt/qemu.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
user = &amp;quot;&amp;lt;your_user&amp;gt;&amp;quot;&lt;br /&gt;
group = &amp;quot;kvm&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
cgroup_device_acl = [&lt;br /&gt;
    &amp;quot;/dev/kvm&amp;quot;,&lt;br /&gt;
    &amp;quot;/dev/input/by-id/KEYBOARD_NAME&amp;quot;,&lt;br /&gt;
    &amp;quot;/dev/input/by-id/MOUSE_NAME&amp;quot;,&lt;br /&gt;
    &amp;quot;/dev/null&amp;quot;, &amp;quot;/dev/full&amp;quot;, &amp;quot;/dev/zero&amp;quot;,&lt;br /&gt;
    &amp;quot;/dev/random&amp;quot;, &amp;quot;/dev/urandom&amp;quot;,&lt;br /&gt;
    &amp;quot;/dev/ptmx&amp;quot;, &amp;quot;/dev/kvm&amp;quot;, &amp;quot;/dev/kqemu&amp;quot;,&lt;br /&gt;
    &amp;quot;/dev/rtc&amp;quot;,&amp;quot;/dev/hpet&amp;quot;, &amp;quot;/dev/sev&amp;quot;&lt;br /&gt;
]&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから使用するユーザーが {{ic|kvm}} と {{ic|input}} [[ユーザーとグループ|グループ]]にアクセスできるようにしてください。{{ic|libvirtd.service}} を再起動してください。これでゲスト OS を起動したら左と右の Control キーを両方同時に押すことでマウスとキーボードを切り替えることができます。&lt;br /&gt;
&lt;br /&gt;
設定で PS/2 から Virtio の入力に切り替えることもできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;input type=&#039;mouse&#039; bus=&#039;virtio&#039;&amp;gt;&lt;br /&gt;
        &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x0e&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;/input&amp;gt;&lt;br /&gt;
&amp;lt;input type=&#039;keyboard&#039; bus=&#039;virtio&#039;&amp;gt;&lt;br /&gt;
        &amp;lt;address type=&#039;pci&#039; domain=&#039;0x0000&#039; bus=&#039;0x00&#039; slot=&#039;0x0f&#039; function=&#039;0x0&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;/input&amp;gt;&lt;br /&gt;
&amp;lt;input type=&#039;mouse&#039; bus=&#039;ps2&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;input type=&#039;keyboard&#039; bus=&#039;ps2&#039;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
ゲスト OS を起動してデバイスオン virtIO ドライバーをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
===注意事項===&lt;br /&gt;
====OVMF ベースの VM で非 EFI イメージを使う====&lt;br /&gt;
OVMF ファームウェアは EFI 以外のメディアの起動をサポートしていません。起動後に UEFI シェルが開かれてしまう場合、EFI ブートメディアに問題がある可能性があります。他の linux/windows イメージを使ってみてイメージに問題がないか確認してください。&lt;br /&gt;
&lt;br /&gt;
==パフォーマンスチューニング==&lt;br /&gt;
PCI パススルーを使うのはビデオゲームや GPU を使用する作業など大抵パフォーマンスが重要な場合です。PCI パススルーによってネイティブの性能に近づきますが、仮想マシンを最大限活用するにはホストとゲスト両方で設定が必要です。&lt;br /&gt;
&lt;br /&gt;
===CPU ピニング===&lt;br /&gt;
KVM ゲストではデフォルトでゲストから要求された操作を仮想プロセッサを表すスレッドとして実行します。スレッドは Linux のスケジューラによって他のスレッドと同じように管理され、nice 値や優先度にあわせて手隙の CPU コアに割り当てられます。スレッド切り替えにはオーバーヘッドが存在するため (コンテキストスイッチによってコアのキャッシュが強制的に変更されるため)、ゲストのパフォーマンスに悪い影響を与えます。CPU ピニングはこの問題を解決してプロセスのスケジューリングを上書きして VM のスレッドは特定のコアでのみ動作するようになります。例えば、ゲストのコア 0, 1, 2, 3 をホストの 4, 5, 6, 7 番目のコアに割り当てるには:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&amp;lt;vcpu placement=&#039;static&#039;&amp;gt;4&amp;lt;/vcpu&amp;gt;&lt;br /&gt;
&amp;lt;cputune&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;0&#039; cpuset=&#039;4&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;1&#039; cpuset=&#039;5&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;2&#039; cpuset=&#039;6&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;3&#039; cpuset=&#039;7&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;/cputune&amp;gt;&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====ハイパースレッディングの場合====&lt;br /&gt;
CPU がハードウェアによるマルチタスクをサポートしている場合 (Intel のチップではハイパースレッディングと呼ばれます)、CPU ピニングをする方法は2つ存在します。ハイパースレッディングは1つの CPU で2つのスレッドを効率的に動作させる手法であるため、クアッドコア CPU ならば8つの論理コアが使えます。物理コアの負担率が高い場合、論理コアは使われません。VM のスレッドを2つの物理コアに割り当てても、2つのコアが対応できる負担を超える作業では2つの論理コアの補助を得ることができません。4つのコアのうち2つのコアをパススルーしただけだからです。&lt;br /&gt;
&lt;br /&gt;
以下はクアッドコアのマシンでハイパースレッディングが有効になっている場合の {{ic|/proc/cpuinfo}} の要約です:&lt;br /&gt;
{{hc|$ grep -e &amp;quot;processor&amp;quot; -e &amp;quot;core id&amp;quot; -e &amp;quot;^$&amp;quot; /proc/cpuinfo|&lt;br /&gt;
processor	: 0&lt;br /&gt;
core id		: 0&lt;br /&gt;
&lt;br /&gt;
processor	: 1&lt;br /&gt;
core id		: 1&lt;br /&gt;
&lt;br /&gt;
processor	: 2&lt;br /&gt;
core id		: 2&lt;br /&gt;
&lt;br /&gt;
processor	: 3&lt;br /&gt;
core id		: 3&lt;br /&gt;
&lt;br /&gt;
processor	: 4&lt;br /&gt;
core id		: 0&lt;br /&gt;
&lt;br /&gt;
processor	: 5&lt;br /&gt;
core id		: 1&lt;br /&gt;
&lt;br /&gt;
processor	: 6&lt;br /&gt;
core id		: 2&lt;br /&gt;
&lt;br /&gt;
processor	: 7&lt;br /&gt;
core id		: 3}}&lt;br /&gt;
&lt;br /&gt;
仮想マシンを使っているときにホスト側で負担が重い計算をしない場合 (あるいはホストを全く使わない場合)、仮想マシンのスレッドを全ての論理コアに固定化して、仮想マシンがコアを活用できるようにすると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
クアッドコアのマシンの場合、以下のようになります:&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&amp;lt;vcpu placement=&#039;static&#039;&amp;gt;4&amp;lt;/vcpu&amp;gt;&lt;br /&gt;
&amp;lt;cputune&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;0&#039; cpuset=&#039;4&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;1&#039; cpuset=&#039;5&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;2&#039; cpuset=&#039;6&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;3&#039; cpuset=&#039;7&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;/cputune&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;cpu mode=&#039;custom&#039; match=&#039;exact&#039;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;topology sockets=&#039;1&#039; cores=&#039;4&#039; threads=&#039;1&#039;/&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/cpu&amp;gt;&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
ホストとゲストで同時に何か処理を行う場合、一部の物理コアとゲストのスレッドを固定して、後はホストでも使えるようにすると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
クアッドコアのマシンの場合、以下のようになります:&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&amp;lt;vcpu placement=&#039;static&#039;&amp;gt;4&amp;lt;/vcpu&amp;gt;&lt;br /&gt;
&amp;lt;cputune&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;0&#039; cpuset=&#039;2&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;1&#039; cpuset=&#039;6&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;2&#039; cpuset=&#039;3&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;vcpupin vcpu=&#039;3&#039; cpuset=&#039;7&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;/cputune&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;cpu mode=&#039;custom&#039; match=&#039;exact&#039;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;topology sockets=&#039;1&#039; cores=&#039;2&#039; threads=&#039;2&#039;/&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/cpu&amp;gt;&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===静的ヒュージページ===&lt;br /&gt;
大量のメモリを必要するアプリケーションでは、メモリの遅延が問題になることがあります。使用するメモリページ (メモリ割り当ての基本単位) が増えれば増えるほど、複数のメモリページにまたがる情報にアプリケーションがアクセスするようになる確立が高まります。メモリページの実際のアドレスを解決するには複数のステップを踏まないとならないため、大抵の場合 CPU は最近使用されたメモリページの情報をキャッシュすることで同一ページの使用を高速化します。しかしながらアプリケーションが大量のメモリを使うとすると問題です。例えば仮想マシンが使用する 4GB のメモリが (メモリページのデフォルトサイズである) 4kB に分割されるような場合、頻繁にキャッシュミスが発生することになりメモリの遅延を増大させてしまいます。このような問題を緩和するためにヒュージページが存在します。大きなサイズのページをアプリケーションに割り当てることで、同一ページが使用される可能性を高めます。通常は必要に応じてヒュージページを動的に管理する、透過的ヒュージページが使用されます。&lt;br /&gt;
&lt;br /&gt;
しかしながら仮想マシンで PCI パススルーを使う場合は透過ヒュージページは意味がありません。IOMMU がゲストのメモリ割り当てを必要とし仮想マシンが起動するとすぐに固定化されるためです。したがってヒュージページの効果を得るには静的に割り当てる必要があります。&lt;br /&gt;
&lt;br /&gt;
{{warning|静的ヒュージページは割り当てられたメモリをロックダウンするため、普通のアプリケーションはそれらのメモリを使用できなくなります。8GB のメモリが搭載されたマシンでヒュージページに 4GB を割り当てると、ホストで使用できるメモリは 4GB だけになります。たとえ VM が実行中でなくてもそれは変わりません。}}&lt;br /&gt;
&lt;br /&gt;
起動時にヒュージページを割り当てるには、カーネルコマンドラインで {{ic|&amp;lt;nowiki&amp;gt;hugepages=x&amp;lt;/nowiki&amp;gt;}} を使って適切な量を指定します。例えば {{ic|&amp;lt;nowiki&amp;gt;hugepages=1024&amp;lt;/nowiki&amp;gt;}} として1024ページを予約すると、ヒュージページあたりデフォルトで 2048kB のサイズが割り当てられるため、仮想マシンが使用するための 2GB 分のメモリが作成されます。&lt;br /&gt;
&lt;br /&gt;
CPU がサポートしていれば手動でページサイズを設定できます。{{ic|&amp;lt;nowiki&amp;gt;grep pdpe1gb /proc/cpuinfo&amp;lt;/nowiki&amp;gt;}} を実行することで 1 GB のヒュージページがサポートされているか確認できます。カーネルパラメータで 1 GB のヒュージページサイズを設定するには: {{ic|&amp;lt;nowiki&amp;gt;default_hugepagesz=1G hugepagesz=1G hugepages=X transparent_hugepage=never&amp;lt;/nowiki&amp;gt;}}。&lt;br /&gt;
&lt;br /&gt;
また、静的ヒュージページは要求を行ったアプリケーションだけが使用できるため、libvirt のドメイン設定に kvm が割り当てたヒュージページを活用するように設定を追加する必要があります:&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&amp;lt;memoryBacking&amp;gt;&lt;br /&gt;
	&amp;lt;hugepages/&amp;gt;&lt;br /&gt;
&amp;lt;/memoryBacking&amp;gt;&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== CPU 周波数ガバナー ===&lt;br /&gt;
&lt;br /&gt;
[[CPU 周波数スケーリング|CPU ガバナー]]の設定によっては、仮想マシンのスレッドによって周波数が引き上がる閾値まで CPU の負担が達しないことがあります。KVM が自力で CPU の周波数を変更することはできないため、CPU の使用率が思うように上がらないとパフォーマンスが出ないという問題になる可能性があります。ゲスト側で CPU 負担が重い作業を実行している間に {{ic|watch lscpu}} によって報告される周波数に変化があるかどうか確認してみてください。周波数が最大値まで上がらない場合、[https://lime-technology.com/forum/index.php?topic=46664.msg447678#msg447678 CPU スケーリングがホスト OS によって制御されている] ことが原因かもしれません。その場合、全てのコアを最大周波数に設定してみてパフォーマンスが改善しないか確認してください。最新の Intel 製チップをデフォルトの P-State ドライバーで使用している場合、cpupower コマンドは[[CPU 周波数スケーリング#CPU 周波数ドライバー|効果がない]]ため、{{ic|/proc/cpuinfo}} を監視して CPU が最大周波数になっていることを確認してください。&lt;br /&gt;
&lt;br /&gt;
=== AMD CPU でパフォーマンスを改善する ===&lt;br /&gt;
&lt;br /&gt;
以前は AMD 環境では Nested Page Tables (NPT) を無効化することで KVM の GPU 性能を引き上げることができました。これは [https://sourceforge.net/p/kvm/bugs/230/ 非常に古いバグ] が原因で、トレードオフとして CPU の性能が落ちて、がたつきが発生することがありました。&lt;br /&gt;
&lt;br /&gt;
カーネル 4.14 と 4.9 から問題を解決する [https://patchwork.kernel.org/patch/10027525/ カーネルパッチ] がマージされています。公式の {{Pkg|linux}} または {{Pkg|linux-lts}} カーネルを使用している場合、パッチは既に適用されています (最新版のカーネルを使っていることを確認してください)。他のカーネルを使っている場合は手動でパッチを適用する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|一部の Ryzen ユーザーによって上記パッチがテストされており、問題なく動作し GPU パススルーの性能がほとんどネイティブのレベルまで向上することが確認されています ([https://www.reddit.com/r/VFIO/comments/78i3jx/possible_fix_for_the_npt_issue_discussed_on_iommu/ こちらの Reddit スレッド] を参照)。}}&lt;br /&gt;
&lt;br /&gt;
QEMU 3.1 から TOPOEXT cpuid フラグはデフォルトで無効になっています。AMD の CPU でハイパースレッディングを使うには手動で有効にする必要があります:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;cpu mode=&#039;host-passthrough&#039; check=&#039;none&#039;&amp;gt;&lt;br /&gt;
 &amp;lt;topology sockets=&#039;1&#039; cores=&#039;4&#039; threads=&#039;2&#039;/&amp;gt;&lt;br /&gt;
 &amp;lt;feature policy=&#039;require&#039; name=&#039;topoext&#039;/&amp;gt;&lt;br /&gt;
 &amp;lt;/cpu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
コミット: https://git.qemu.org/?p=qemu.git;a=commit;h=7210a02c58572b2686a3a8d610c6628f87864aed&lt;br /&gt;
&lt;br /&gt;
== 特殊な構成 ==&lt;br /&gt;
&lt;br /&gt;
特定の構成では特別な設定が必要になります。ホストあるいは VM が正しく動作しない場合、あなたのシステムが以下のどれかにあてはまっていないか確認してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストとホストで同じ GPU を使う ===&lt;br /&gt;
pci-stub と vfio-pci はどちらもベンダー・デバイス id の組み合わせを使って起動時にバインドするデバイスを認識するため、同じ ID の GPU が2つある場合、パススルードライバーをどちらか片方にバインドできません。スクリプトを使って {{ic|driver_override}} の pci バスアドレスによって割り当てる必要があります。&lt;br /&gt;
&lt;br /&gt;
スクリプトを作成して vfio-pci をブート GPU 以外の全ての GPU にバインドすることができます。{{ic|/usr/bin/vfio-pci-override.sh}} スクリプトを作成:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
for i in /sys/bus/pci/devices/*/boot_vga; do&lt;br /&gt;
	if [ $(cat &amp;quot;$i&amp;quot;) -eq 0 ]; then&lt;br /&gt;
		GPU=&amp;quot;${i%/boot_vga}&amp;quot;&lt;br /&gt;
		AUDIO=&amp;quot;$(echo &amp;quot;$GPU&amp;quot; | sed -e &amp;quot;s/0$/1/&amp;quot;)&amp;quot;&lt;br /&gt;
		echo &amp;quot;vfio-pci&amp;quot; &amp;gt; &amp;quot;$GPU/driver_override&amp;quot;&lt;br /&gt;
		if [ -d &amp;quot;$AUDIO&amp;quot; ]; then&lt;br /&gt;
			echo &amp;quot;vfio-pci&amp;quot; &amp;gt; &amp;quot;$AUDIO/driver_override&amp;quot;&lt;br /&gt;
		fi&lt;br /&gt;
	fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
modprobe -i vfio-pci&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/modprobe.d/vfio.conf}} を以下の内容で作成:&lt;br /&gt;
 install vfio-pci /usr/bin/vfio-pci-override.sh&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/mkinitcpio.conf}} を編集:&lt;br /&gt;
&lt;br /&gt;
MODULES からビデオドライバーを全て削除して {{ic|vfio-pci}} と {{ic|vfio_iommu_type1}} を追加してください:&lt;br /&gt;
 MODULES=(ext4 vfat vfio-pci vfio_iommu_type1)&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/modprobe.d/vfio.conf}} と {{ic|/usr/bin/vfio-pci-override.sh}} を FILES に追加してください:&lt;br /&gt;
 FILES=(/etc/modprobe.d/vfio.conf /usr/bin/vfio-pci-override.sh)&lt;br /&gt;
&lt;br /&gt;
initramfs を再生成して再起動してください:&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
=== ブート GPU をゲストにパススルー ===&lt;br /&gt;
PCI パススルーをするときに {{ic|boot_vga}} とマークされた GPU は特殊なケースになります。ブートメッセージや BIOS の設定メニューなどを表示するのに BIOS がその GPU を必要とするためです。ブート GPU はパススルー時に [https://www.redhat.com/archives/vfio-users/2016-May/msg00224.html 自由に改造できる VGA ブート ROM のコピー] を作成します。システムから認識されるのは改造されたコピーになり、パススルードライバーによって不正な GPU として拒否される可能性があります。一般的には BIOS の設定でブート GPU を変更して代わりにホスト GPU を使用するか、あるいはそれが不可能な場合、マシンのホストとゲストのカードを交換することが推奨されます。&lt;br /&gt;
&lt;br /&gt;
=== IOMMU グループのバイパス (ACS 上書きパッチ) ===&lt;br /&gt;
&lt;br /&gt;
パススルーしたくない PCI デバイスもグループに入ってしまっている場合、Alex Williamson の ACS override パッチを使うことでデバイスを分離できます。その場合は [http://vfio.blogspot.com/2014/08/iommu-groups-inside-and-out.html 危険性] を承知してください。&lt;br /&gt;
&lt;br /&gt;
パッチが適用されたカーネルが必要になります。{{AUR|linux-vfio}} パッケージでカーネルをインストールするのが一番簡単です。&lt;br /&gt;
&lt;br /&gt;
さらに、ACS override パッチはカーネルのコマンドラインオプションで有効にしなければなりません。パッチファイルは以下のドキュメントを追加します:&lt;br /&gt;
&lt;br /&gt;
 pcie_acs_override =&lt;br /&gt;
         [PCIE] Override missing PCIe ACS support for:&lt;br /&gt;
     downstream&lt;br /&gt;
         All downstream ports - full ACS capabilties&lt;br /&gt;
     multifunction&lt;br /&gt;
         All multifunction devices - multifunction ACS subset&lt;br /&gt;
     id:nnnn:nnnn&lt;br /&gt;
         Specfic device - full ACS capabilities&lt;br /&gt;
         Specified as vid:did (vendor/device ID) in hex&lt;br /&gt;
&lt;br /&gt;
通常は {{ic|pcie_acs_override&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;downstream}} オプションで上手くいきます。&lt;br /&gt;
&lt;br /&gt;
インストールと設定が終わったら、[[カーネルパラメータ|ブートローダーのカーネルパラメータ]]を再設定して {{ic|pcie_acs_override&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;}} オプションが有効になった状態で新しいカーネルをロードするようにしてください。&lt;br /&gt;
&lt;br /&gt;
== QEMU で libvirt を使わない ==&lt;br /&gt;
&lt;br /&gt;
libvirt を使って仮想マシンをセットアップするかわりに、QEMU コマンドにカスタムパラメータを付けるだけで PCI パススルーを使用するように VM を起動できます。スクリプトによる設定などで有用です。&lt;br /&gt;
&lt;br /&gt;
[[#IOMMU のセットアップ]]と[[#GPU の分離]]を行ってから、[[QEMU]] の記事に従って仮想環境をセットアップして、[[QEMU#KVM を有効にする|KVM を有効]]にして {{ic|1=-device vfio-pci,host=07:00.0}} フラグを使ってください。識別子の (07:00.0) は GPU を分離するときに使用した実際のデバイスの ID に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
OVMF ファームウェアを利用するために、{{Pkg|ovmf}}{{Broken package link|置換パッケージ: {{Pkg|edk2-ovmf}}}} パッケージをインストールして、{{ic|/usr/share/ovmf/x64/OVMF_VARS.fd}} から {{ic|/tmp/MY_VARS.fd}} など一時的なディレクトリに UEFI 変数をコピーして QEMU コマンドに以下のパラメータを追加して OVMF のパスを指定します (パラメータの順序は重要です):&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=-drive if=pflash,format=raw,readonly,file=/usr/share/ovmf/x64/OVMF_CODE.fd}} - OVMF ファームウェアバイナリを指定、readonly オプションに注意してください。&lt;br /&gt;
* {{ic|1=-drive if=pflash,format=raw,file=/tmp/MY_VARS.fd}} - 変数のパスを指定。&lt;br /&gt;
&lt;br /&gt;
{{Note|OVMF の代わりに QEMU のデフォルトである SeaBIOS を使うこともできますが、パススルーの設定で問題が発生することがあるため推奨されません。}}&lt;br /&gt;
&lt;br /&gt;
QEMU の記事を読んで [[QEMU#virtio ドライバーのインストール|virtio ドライバー]]の使用などパフォーマンスを向上させることができる設定を調べることを推奨します。&lt;br /&gt;
&lt;br /&gt;
また、{{ic|1=-cpu host,kvm=off}} パラメータを使ってホストの CPU モデル情報を VM に渡して Nvidia などメーカーのデバイスドライバーから仮想環境でないと認識させる必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
==他のデバイスのパススルー==&lt;br /&gt;
===USB コントローラ===&lt;br /&gt;
マザーボードに接続された複数の USB コントローラが複数のグループにマッピングされている場合、USB デバイスの代わりに USB コントローラをパススルーすることができます。個別の USB デバイスではなくコントローラをパススルーすることには以下の利点があります:&lt;br /&gt;
&lt;br /&gt;
* 特定の操作 (スマートフォンのアップデートなど) でデバイスが切断されたり ID が変わったりしても、仮想マシンから突然認識されなくなることはありません。&lt;br /&gt;
* コントローラによって管理されている USB 端子を VM が直接扱うため、デバイスを接続・切断してもハイパーバイザに通知する必要がありません。&lt;br /&gt;
* VM を起動したときにゲストにパススルーする USB デバイスがなくなってしまっていても Libvirt はエラーを出力しません。&lt;br /&gt;
&lt;br /&gt;
GPU と違って、大抵の USB コントローラのドライバーでは VM で使用するのに特殊な設定を必要としません。副作用を起こさずにホストとゲストの間で制御を受け渡すことができます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB コントローラがリセットに対応していることを確認してください。[[#リセットに対応していないデバイスのパススルー]]を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下のコマンドを使うことでコントローラや端子とデバイスがどのように PCI デバイスと割り当てられているか確認することができます:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ &amp;lt;nowiki&amp;gt;for usb_ctrl in $(find /sys/bus/usb/devices/usb* -maxdepth 0 -type l); do pci_path=&amp;quot;$(dirname &amp;quot;$(realpath &amp;quot;${usb_ctrl}&amp;quot;)&amp;quot;)&amp;quot;; echo &amp;quot;Bus $(cat &amp;quot;${usb_ctrl}/busnum&amp;quot;) --&amp;gt; $(basename $pci_path) (IOMMU group $(basename $(realpath $pci_path/iommu_group)))&amp;quot;; lsusb -s &amp;quot;$(cat &amp;quot;${usb_ctrl}/busnum&amp;quot;):&amp;quot;; echo; done&amp;lt;/nowiki&amp;gt;|&lt;br /&gt;
Bus 1 --&amp;gt; 0000:00:1a.0 (IOMMU group 4)&lt;br /&gt;
Bus 001 Device 004: ID 04f2:b217 Chicony Electronics Co., Ltd Lenovo Integrated Camera (0.3MP)&lt;br /&gt;
Bus 001 Device 007: ID 0a5c:21e6 Broadcom Corp. BCM20702 Bluetooth 4.0 [ThinkPad]&lt;br /&gt;
Bus 001 Device 008: ID 0781:5530 SanDisk Corp. Cruzer&lt;br /&gt;
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub&lt;br /&gt;
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
&lt;br /&gt;
Bus 2 --&amp;gt; 0000:00:1d.0 (IOMMU group 9)&lt;br /&gt;
Bus 002 Device 006: ID 0451:e012 Texas Instruments, Inc. TI-Nspire Calculator&lt;br /&gt;
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub}}&lt;br /&gt;
&lt;br /&gt;
上記のノートパソコンには2つの USB コントローラによる3つの USB ポートがあり、それぞれに IOMMU グループが存在します。例として Bus 001 はひとつの USB ポートを管理していますが (SanDisk の USB ペンドライブが接続されています)、内蔵ウェブカメラや bluetooth カードなど内部デバイスも管理されています。一方 Bus 002 は接続されている電卓以外は何も管理していません。3つ目のポートは空で、リスト上には表示されていませんが、実際は Bus 002 によって管理されています。&lt;br /&gt;
&lt;br /&gt;
様々なデバイスを接続してみてどのコントローラがどのポートを管理しているか判断して、どのコントローラをパススルーするか決めたら、ゲスト設定の VM によって制御する PCI ホストデバイスのリストにコントローラを追加してください。他の設定は不要です。&lt;br /&gt;
&lt;br /&gt;
{{Note|USB コントローラがリセットをサポートしていないか、独立したグループにないか、もしくはパススルーできない場合でも、[[udev]] ルールを通じて同様の結果を達成することが可能です。特定の USB ポートに接続された任意のデバイスを仮想マシンに自動的に接続できるようにする [https://github.com/olavmrk/usb-libvirt-hotplug] を参照して下さい。}}&lt;br /&gt;
&lt;br /&gt;
===PulseAudio で仮想マシンの音声出力をホストにパススルー===&lt;br /&gt;
libvirt を使うことで仮想マシンの音声出力をアプリケーションとしてホストに転送することが可能です。複数の音声ストリームをホストの出力に転送でき、パススルーをサポートしていない音声出力デバイスで使うことができます。転送するには [[PulseAudio]] が必要です。&lt;br /&gt;
&lt;br /&gt;
まず、{{ic|&amp;lt;nowiki&amp;gt;#user = &amp;quot;&amp;quot;&amp;lt;/nowiki&amp;gt;}} 行のコメントを削除してください。それからクォートの中にユーザー名を入力してください。これで QEMU はユーザーの PulseAudio ストリームを転送するようになります。&lt;br /&gt;
{{hc|/etc/libvirt/qemu.conf|&lt;br /&gt;
user &amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt; &amp;quot;example&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
次に、libvirt の設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
以下の行を:&lt;br /&gt;
&lt;br /&gt;
{{hc|virsh edit [vmname]|&lt;br /&gt;
&amp;lt;domain type&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;kvm&#039;&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のように変更してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|virsh edit [vmname]|&lt;br /&gt;
&amp;lt;domain type&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;kvm&#039; xmlns:qemu&amp;lt;nowiki&amp;gt;=&#039;http://libvirt.org/schemas/domain/qemu/1.0&#039;&amp;lt;/nowiki&amp;gt;&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして libvirt の xml ファイルの末尾に QEMU PulseAudio 環境変数を設定してください。&lt;br /&gt;
&lt;br /&gt;
以下の行を:&lt;br /&gt;
&lt;br /&gt;
{{hc|virsh edit [vmname]|&lt;br /&gt;
    &amp;lt;/devices&amp;gt;&lt;br /&gt;
   &amp;lt;/domain&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のように変更してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|virsh edit [vmname]|&lt;br /&gt;
    &amp;lt;/devices&amp;gt;&lt;br /&gt;
      &amp;lt;qemu:commandline&amp;gt;&lt;br /&gt;
        &amp;lt;qemu:env name&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;QEMU_AUDIO_DRV&#039; value&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;pa&#039;/&amp;gt;&lt;br /&gt;
        &amp;lt;qemu:env name&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;QEMU_PA_SERVER&#039; value&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;/run/user/1000/pulse/native&#039;/&amp;gt;&lt;br /&gt;
      &amp;lt;/qemu:commandline&amp;gt;&lt;br /&gt;
 &amp;lt;/domain&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
user ディレクトリの 1000 はあなたが使用しているユーザーの uid に置き換えてください ({{ic|id}} コマンドを実行することで確認できます)。先に進む前にファイルを保存して終了しないと変更が登録されません。終了後に {{ic|&amp;lt;nowiki&amp;gt;Domain [vmname] XML configuration edited.&amp;lt;/nowiki&amp;gt;}} というメッセージが表示されれば、変更が適用されたということです。&lt;br /&gt;
&lt;br /&gt;
設定したら {{ic|libvirtd}} サービスと {{ic|pulseaudio.service}} の[[Systemd/ユーザー|ユーザーサービス]]を再起動してください。&lt;br /&gt;
&lt;br /&gt;
これで仮想マシンの音声出力はアプリケーションとしてホストに転送されるようになります。{{Pkg|pavucontrol}} アプリケーションを使うことで出力デバイスを制御できます。Windows ゲストの場合、[[#ビデオカードの HDMI 出力からの音声がおかしい|メッセージシグナル割り込み]]を使用しないとノイズが発生するので注意してください。&lt;br /&gt;
&lt;br /&gt;
==== QEMU 3.0 オーディオの変更 ====&lt;br /&gt;
&lt;br /&gt;
QEMU 3.0 以降では、オーディオパッチの一部がマージされました ([https://www.reddit.com/r/VFIO/comments/97iuov/qemu_30_released/e49wmyd/ reddit リンク])。パッチのいくつかはまだ正式に上流にマージされていないため、 {{AUR|qemu-patched}}{{Broken package link|パッケージが存在しません}} パッケージにはオーディオパッチが複数含まれています。&lt;br /&gt;
&lt;br /&gt;
新しいコードパスを使用するにはあなたの VM のセットアップに応じてチップセットを、例えば {{ic|pc-q35-3.0}} または {{ic|pc-i440fx-3.0}} (qemu 3.0 インストール後) に変更する必要があります:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&lt;br /&gt;
&amp;lt;domain type&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;kvm&#039;&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;os&amp;gt;&lt;br /&gt;
    &amp;lt;type arch&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;x86_64&#039; machine&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;pc-q35-3.0&#039;&amp;gt;hvm&amp;lt;/type&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
  &amp;lt;/os&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&lt;br /&gt;
&amp;lt;domain type&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;kvm&#039;&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;os&amp;gt;&lt;br /&gt;
    &amp;lt;type arch&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;x86_64&#039; machine&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&#039;pc-i440fx-3.0&#039;&amp;gt;hvm&amp;lt;/type&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
  &amp;lt;/os&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{AUR|qemu-patched}}{{Broken package link|パッケージが存在しません}} のコンパイル時間を早めるには {{ic|1=--target-list=x86_64-softmmu}} を使って qemu の x86_64 ゲストサポートのみコンパイルします。&lt;br /&gt;
* Qemu 3.0 以降で PulseAudio をユーザーとして実行している場合に {{ic|1=/etc/libvirt/qemu.conf}} で {{ic|1= nographics_allow_host_audio = 1}} を有効にしたときは、上記の XML 引数 {{ic|qemu:env}} は必要&#039;&#039;ありません&#039;&#039;。QEMU/Libvirt で別のユーザーを使用する場合は、{{ic|QEMU_PA_SERVER}} 変数を維持する必要があります。そうしないとアクセス許可エラーが発生します。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===注意事項===&lt;br /&gt;
====リセットに対応していないデバイスのパススルー====&lt;br /&gt;
仮想マシンのシャットダウン時、ゲストが使用していたデバイスは全てシャットダウンの準備時に OS によって deinitialize されます。この状態ではデバイスは機能しなくなり、通常通りに機能させるには電源を入れ直さなくてはなりません。Linux は独自にパワーサイクルを処理しますが、デバイスのリセット方法がわからない場合、無効状態のままになりデバイスが利用不可能になります。Libvirt と Qemu はどちらも仮想マシンを完全に停止する前に全てのホスト PCI デバイスが再接続できる状態になっていることを求めるため、デバイスがリセットできない状態になると、&amp;quot;Shutting down&amp;quot; 状態でフリーズしてホストマシンを再起動するまで仮想マシンを再起動できなくなってしまいます。そのため、カーネルによってリセットが可能な PCI デバイスのみパススルーすることを推奨します。PCI デバイスの sysfs ノードに {{ic|reset}} ファイルが存在するかどうかでリセット可能かどうか確認できます (例: {{ic|/sys/bus/pci/devices/0000:00:1a.0/reset}})。&lt;br /&gt;
&lt;br /&gt;
以下の bash コマンドを実行するとどのデバイスがリセットできてどのデバイスがリセットできないか表示されます:&lt;br /&gt;
&lt;br /&gt;
{{hc|&amp;lt;nowiki&amp;gt;for iommu_group in $(find /sys/kernel/iommu_groups/ -maxdepth 1 -mindepth 1 -type d);do echo &amp;quot;IOMMU group $(basename &amp;quot;$iommu_group&amp;quot;)&amp;quot;; for device in $(\ls -1 &amp;quot;$iommu_group&amp;quot;/devices/); do if [[ -e &amp;quot;$iommu_group&amp;quot;/devices/&amp;quot;$device&amp;quot;/reset ]]; then echo -n &amp;quot;[RESET]&amp;quot;; fi; echo -n $&#039;\t&#039;;lspci -nns &amp;quot;$device&amp;quot;; done; done&amp;lt;/nowiki&amp;gt;|&lt;br /&gt;
IOMMU group 0&lt;br /&gt;
	00:00.0 Host bridge [0600]: Intel Corporation Xeon E3-1200 v2/Ivy Bridge DRAM Controller [8086:0158] (rev 09)&lt;br /&gt;
IOMMU group 1&lt;br /&gt;
	00:01.0 PCI bridge [0604]: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port [8086:0151] (rev 09)&lt;br /&gt;
	01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK208 [GeForce GT 720] [10de:1288] (rev a1)&lt;br /&gt;
	01:00.1 Audio device [0403]: NVIDIA Corporation GK208 HDMI/DP Audio Controller [10de:0e0f] (rev a1)&lt;br /&gt;
IOMMU group 2&lt;br /&gt;
	00:14.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller [8086:1e31] (rev 04)&lt;br /&gt;
IOMMU group 4&lt;br /&gt;
[RESET]	00:1a.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 [8086:1e2d] (rev 04)&lt;br /&gt;
IOMMU group 5&lt;br /&gt;
[RESET]	00:1b.0 Audio device [0403]: Intel Corporation 7 Series/C210 Series Chipset Family High Definition Audio Controller [8086:1e20] (rev 04)&lt;br /&gt;
IOMMU group 10&lt;br /&gt;
[RESET]	00:1d.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 [8086:1e26] (rev 04)&lt;br /&gt;
IOMMU group 13&lt;br /&gt;
	06:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)&lt;br /&gt;
	06:00.1 Audio device [0403]: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の場合 00:14.0 の xHCI USB コントローラはリセットができないため、仮想マシンが正しくシャットダウンできなくなります。00:1b.0 の内蔵サウンドカードと 00:1a.0 および 00:1d.0 のコントローラはリセット可能であるため問題が起こりません。&lt;br /&gt;
&lt;br /&gt;
==トラブルシューティング==&lt;br /&gt;
以下で問題が見つけられない場合、[[QEMU#トラブルシューティング]]も見てください。&lt;br /&gt;
&lt;br /&gt;
===Windows の仮想マシンに NVIDIA の GPU をパススルーした場合に &amp;quot;Error 43 : Driver failed to load&amp;quot;===&lt;br /&gt;
{{Note|以下の設定により Nvidia ドライバーによって起動時に SYSTEM_THREAD_EXCEPTION_NOT_HANDLED でクラッシュする問題も解決します。}}&lt;br /&gt;
&lt;br /&gt;
バージョン 337.88 から、Windows の Nvidia ドライバーはハイパーバイザが動作しているかどうかを確認して、動作していることを認識すると Windows のデバイスマネージャに Error 43 を吐くようになりました。QEMU 2.5.0 と libvirt 1.3.3 以上では、ハイパーバイザの vendor_id を偽装することができ、Nvidia ドライバーを騙してロードさせることができます。QEMU コマンドの cpu パラメータに {{ic|&amp;lt;nowiki&amp;gt;hv_vendor_id=whatever&amp;lt;/nowiki&amp;gt;}} を追加するか、libvirt のドメイン設定に以下の行を追加するだけです。ID は12文字ちょうどの英数字 (例: &#039;1234567890ab&#039;) に設定してください。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&amp;lt;features&amp;gt;&lt;br /&gt;
	&amp;lt;hyperv&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;vendor_id state=&#039;on&#039; value=&#039;whatever&#039;/&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
	&amp;lt;/hyperv&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;kvm&amp;gt;&lt;br /&gt;
	&amp;lt;hidden state=&#039;on&#039;/&amp;gt;&lt;br /&gt;
	&amp;lt;/kvm&amp;gt;&lt;br /&gt;
&amp;lt;/features&amp;gt;&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
古いバージョンの QEMU や libvirt を使用している場合は、ハイパーバイザの拡張を無効化する必要があり、かなり性能が落ちてしまいます。libvirt のドメイン設定ファイルに以下を記述してください:&lt;br /&gt;
{{hc|$ virsh edit [vmname]|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&amp;lt;features&amp;gt;&lt;br /&gt;
	&amp;lt;hyperv&amp;gt;&lt;br /&gt;
		&amp;lt;relaxed state=&#039;on&#039;/&amp;gt;&lt;br /&gt;
		&amp;lt;vapic state=&#039;on&#039;/&amp;gt;&lt;br /&gt;
		&amp;lt;spinlocks state=&#039;on&#039; retries=&#039;8191&#039;/&amp;gt;&lt;br /&gt;
	&amp;lt;/hyperv&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
&amp;lt;/features&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;clock offset=&#039;localtime&#039;&amp;gt;&lt;br /&gt;
	&amp;lt;timer name=&#039;hypervclock&#039; present=&#039;yes&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;/clock&amp;gt;&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;clock offset=&#039;localtime&#039;&amp;gt;&lt;br /&gt;
	&amp;lt;timer name=&#039;hypervclock&#039; present=&#039;no&#039;/&amp;gt;&lt;br /&gt;
&amp;lt;/clock&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;features&amp;gt;&lt;br /&gt;
	&amp;lt;kvm&amp;gt;&lt;br /&gt;
	&amp;lt;hidden state=&#039;on&#039;/&amp;gt;&lt;br /&gt;
	&amp;lt;/kvm&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
	&amp;lt;hyperv&amp;gt;&lt;br /&gt;
		&amp;lt;relaxed state=&#039;off&#039;/&amp;gt;&lt;br /&gt;
		&amp;lt;vapic state=&#039;off&#039;/&amp;gt;&lt;br /&gt;
		&amp;lt;spinlocks state=&#039;off&#039;/&amp;gt;&lt;br /&gt;
	&amp;lt;/hyperv&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
&amp;lt;/features&amp;gt;&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VM を起動した後に dmesg に &amp;quot;BAR 3: can&#039;t reserve [mem]&amp;quot; エラーが表示される====&lt;br /&gt;
&lt;br /&gt;
上記の方法を試してもコード 43 が発生する場合、dmesg にメモリ予約エラーが記録されていないか確認してください:&lt;br /&gt;
&lt;br /&gt;
 vfio-pci 0000:09:00.0: BAR 3: can&#039;t reserve [mem 0xf0000000-0xf1ffffff 64bit pref]&lt;br /&gt;
&lt;br /&gt;
上記のようなメッセージが出力される場合、グラフィックカードを接続している PCI ブリッジを確認してください。以下のコマンドでデバイスツリーを確認できます:&lt;br /&gt;
&lt;br /&gt;
 $ lspci -t&lt;br /&gt;
&lt;br /&gt;
VM を起動する前に以下のコマンドを実行してください (ID は上記のコマンドで確認できた実際の ID に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/bus/pci/devices/0000\:00\:03.1/remove&lt;br /&gt;
 # echo 1 &amp;gt; /sys/bus/pci/rescan&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.linuxquestions.org/questions/linux-kernel-70/kernel-fails-to-assign-memory-to-pcie-device-4175487043/ こちらの記事] を参照。&lt;br /&gt;
&lt;br /&gt;
{{Note|おそらく {{ic|video&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;efifb:off}} [[カーネルパラメータ]]の設定も必要です [https://pve.proxmox.com/wiki/Pci_passthrough#BAR_3:_can.27t_reserve_.5Bmem.5D_error]。}}&lt;br /&gt;
&lt;br /&gt;
===CPU 例外によってクラッシュが発生する===&lt;br /&gt;
[[QEMU#特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する]]を参照。&lt;br /&gt;
&lt;br /&gt;
===Windows の仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot;===&lt;br /&gt;
[[QEMU#Windows の仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot;]] を参照。&lt;br /&gt;
&lt;br /&gt;
===ビデオカードの HDMI 出力からの音声がおかしい===&lt;br /&gt;
ビデオカードの HDMI 端子を使用したときに、ユーザーによっては仮想マシンの音声出力が遅れたり音が割れたりすることがあります。大抵の場合、グラフィックも遅れるようになります。解決方法としてはデフォルトの割り込み方法 (Line-Based Interrupts) の代わりに MSI (Message Signaled-Based Interrupts) を有効にする方法があります。&lt;br /&gt;
&lt;br /&gt;
MSI がサポートされているか・有効になっているか確認するには、以下のコマンドを root で実行してください:&lt;br /&gt;
 # lspci -vs $device | grep &#039;MSI:&#039;&lt;br /&gt;
`$device` はカードのアドレスに置き換えてください (例: `01:00.0`)。&lt;br /&gt;
&lt;br /&gt;
出力は以下のようになります:&lt;br /&gt;
 Capabilities: [60] MSI: Enable&#039;&#039;&#039;-&#039;&#039;&#039; Count=1/1 Maskable- 64bit+&lt;br /&gt;
&lt;br /&gt;
{{ic|Enable}} の後ろの {{ic|-}} は MSI がサポートされおり VM によって使われていないことを意味します。{{ic|+}} であれば VM によって使われています。&lt;br /&gt;
&lt;br /&gt;
有効にする手順は非常に複雑です。[https://forums.guru3d.com/showthread.php?t=378044 こちら] に設定の手順と概要が載っています。&lt;br /&gt;
&lt;br /&gt;
他にも [http://lime-technology.com/wiki/index.php/UnRAID_6/VM_Guest_Support#Enable_MSI_for_Interrupts_to_Fix_HDMI_Audio_Support lime-technology の wiki] や [http://vfio.blogspot.it/2014/09/vfio-interrupts-and-how-to-coax-windows.html VFIO tips and tricks] の記事にヒントが載っています。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/CHEF-KOCH/MSI-utility MSI Utility (FOSS Version 2)] という UI ツールが64ビットの Windows 10 で動作しこの手順を簡素化します。&lt;br /&gt;
&lt;br /&gt;
nVidia カードの 0 function の MSI を有効にするだけでは問題が解決しない場合 ({{ic|01:00.0 VGA compatible controller: NVIDIA Corporation GM206 [GeForce GTX 960] (rev a1) (prog-if 00 [VGA controller])}})、他の function の MSI も有効にする必要があります ({{ic|01:00.1 Audio device: NVIDIA Corporation Device 0fba (rev a1)}})。&lt;br /&gt;
&lt;br /&gt;
=== intel_iommu を有効にしたときにホスト側で HDMI から音声が出力されない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|intel_iommu}} を有効にしたときにホストの Intel GPU の HDMI 出力デバイスが使えなくなった場合、{{ic|igfx_off}} (i.e. {{ic|intel_iommu&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;on,igfx_off}}) オプションを設定することで音声が出力できるようになることがあります。{{ic|igfx_off}} の設定について詳しくは [https://www.kernel.org/doc/Documentation/Intel-IOMMU.txt Intel-IOMMU.txt] の {{ic|Graphics Problems?}} を読んでください。&lt;br /&gt;
&lt;br /&gt;
=== vfio_pci を有効化したあとに X が起動しない ===&lt;br /&gt;
&lt;br /&gt;
ホスト GPU がセカンダリ GPU として認識されている場合、ゲスト GPU のドライバーをロードしようとしたときに X がエラーを起こします。Xorg の設定でホスト GPU の BusID を指定することで解決します。BusID  は lspci や Xorg のログで確認できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/X11/xorg.conf.d/10-intel.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Section &amp;quot;Device&amp;quot;&lt;br /&gt;
        Identifier &amp;quot;Intel GPU&amp;quot;&lt;br /&gt;
        Driver &amp;quot;modesetting&amp;quot;&lt;br /&gt;
        BusID  &amp;quot;PCI:0:2:0&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.redhat.com/archives/vfio-users/2016-August/msg00025.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Chromium が内蔵グラフィックをアクセラレーションに使わない ===&lt;br /&gt;
&lt;br /&gt;
Chromium はシステム内の GPU をできるかぎり多く検出してから使用する GPU を選択します (大抵はディスクリートの NVIDIA/AMD グラフィック)。使用する GPU は PCI デバイスによって選択されます。OpenGL レンダラが利用できるかどうかは考慮されません。結果として Chromium は内蔵 GPU を無視して、ゲスト VM が動作していてホスト環境から GPU が使えなくなっているかどうかに関係なく、{{ic|vfio-pci}} ドライバーに紐付けられた専用 GPU を使用しようとすることがあります。その場合 GPU が使えないためにソフトウェアレンダリングが使われることになります (CPU の負担が高まり、動画の再生が途切れがちになったりスクロールがスムーズに機能しなくなったりします)。&lt;br /&gt;
&lt;br /&gt;
解決方法は [[Chromium 設定#特定の GPU の使用を強制する]]を見てください。&lt;br /&gt;
&lt;br /&gt;
=== VM がひとつしかコアを使わない ===&lt;br /&gt;
&lt;br /&gt;
IOMMU を有効にしてコアのカウントを 1 よりも大きくしても、VM が使用する CPU コアとスレッドがひとつしか現れないことがあります。解決するには {{ic|virt-manager}} で &amp;quot;Manually set CPU topology&amp;quot; を有効にして使用したい CPU ソケット・コア・スレッド数を設定してください。&amp;quot;Threads&amp;quot; は合計スレッド数ではなく各 CPU ごとのスレッド数なので注意してください。&lt;br /&gt;
&lt;br /&gt;
=== パススルーは機能しているのに出力が表示されない ===&lt;br /&gt;
&lt;br /&gt;
virt-manager を使用している場合、仮想マシンで UEFI ファームウェアが選択されていることを確認してください。また、仮想マシンに適切なデバイスが渡されていることも確認してください。&lt;br /&gt;
&lt;br /&gt;
=== virt-manager のパーミッション問題 ===&lt;br /&gt;
&lt;br /&gt;
virt-manager でパーミッションエラーが発生する場合、以下を {{ic|/etc/libvirt/qemu.conf}} に追加してください:&lt;br /&gt;
&lt;br /&gt;
 group=&amp;quot;kvm&amp;quot;&lt;br /&gt;
 user=&amp;quot;&#039;&#039;user&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
上記で解決しない場合は使用しているユーザーアカウントを {{ic|kvm}} と {{ic|libvirt}} [[グループ]]に追加してください。&lt;br /&gt;
&lt;br /&gt;
=== VM シャットダウン後にホストがロックアップする ===&lt;br /&gt;
&lt;br /&gt;
Windows10 ゲストを実行している場合に、VM を長時間実行した後、ホストの複数の CPU コアがロックアップするという問題が発生することがあります ([https://bbs.archlinux.org/viewtopic.php?id=206050&amp;amp;p=2]を参照)。この問題を解決するには、ゲストにパススルーした GPU でメッセージシグナル割り込みを有効にしてみてください。有効化する方法のガイドは [https://forums.guru3d.com/threads/windows-line-based-vs-message-signaled-based-interrupts.378044/] にあります。&lt;br /&gt;
&lt;br /&gt;
=== スリープ時にゲストが実行されているとホストがロックアップする ===&lt;br /&gt;
&lt;br /&gt;
VFIO を有効にした仮想マシンを起動したまま、スリープ/復帰を行おうとすると不安定になることがあり、ホストマシンをシャットダウンしようとするとロックアップする既知の問題があります。以下の libvirt フックスクリプトと systemd ユニットを使用して、ゲストを実行している間にホストがスリープ状態になるのを防止することで問題を避けることができます。フックファイルの動作には実行権限が必要です。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/libvirt/hooks/qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
OBJECT=&amp;quot;$1&amp;quot;&lt;br /&gt;
OPERATION=&amp;quot;$2&amp;quot;&lt;br /&gt;
SUBOPERATION=&amp;quot;$3&amp;quot;&lt;br /&gt;
EXTRA_ARG=&amp;quot;$4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$OPERATION&amp;quot; in&lt;br /&gt;
        &amp;quot;prepare&amp;quot;)&lt;br /&gt;
                systemctl start libvirt-nosleep@&amp;quot;$OBJECT&amp;quot;&lt;br /&gt;
                ;;&lt;br /&gt;
        &amp;quot;release&amp;quot;)&lt;br /&gt;
                systemctl stop libvirt-nosleep@&amp;quot;$OBJECT&amp;quot;&lt;br /&gt;
                ;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/libvirt-nosleep@.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Preventing sleep while libvirt domain &amp;quot;%i&amp;quot; is running&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/usr/bin/systemd-inhibit --what=sleep --why=&amp;quot;Libvirt domain \&amp;quot;%i\&amp;quot; is running&amp;quot; --who=%U --mode=block sleep infinity&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== ovmf のアップグレード後にブートできない ===&lt;br /&gt;
ovmf-1:r23112.018432f0ce-1 からアップグレードしたときに起動できなくなった場合、 {{ic|/var/lib/libvirt/qemu/nvram}} にある古い *VARS.fd ファイルを削除する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # mv /var/lib/libvirt/qemu/nvram/vmname_VARS.fd /var/lib/libvirt/qemu/nvram/vmname_VARS.fd.old&lt;br /&gt;
&lt;br /&gt;
詳しくは {{Bug|57825}} を参照。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [https://bbs.archlinux.org/viewtopic.php?id=162768 Arch Linux フォーラムの議論] | [https://archive.is/kZYMt アーカイブリンク]&lt;br /&gt;
* [https://docs.google.com/spreadsheet/ccc?key=0Aryg5nO-kBebdFozaW9tUWdVd2VHM0lvck95TUlpMlE ユーザーによるハードウェア互換リスト]&lt;br /&gt;
* [https://pastebin.com/rcnUZCv7 https://www.youtube.com/watch?v=37D2bRsthfI のサンプルスクリプト]&lt;br /&gt;
* [https://vfio.blogspot.com/ PCI パススルーの完全なチュートリアル]&lt;br /&gt;
* [https://www.redhat.com/archives/vfio-users/ VFIO users メーリングリスト]&lt;br /&gt;
* [ircs://chat.freenode.net/vfio-users #vfio-users on freenode]&lt;br /&gt;
* [https://www.youtube.com/watch?v=aLeWg11ZBn0 YouTube: Level1Linux - Ryzen による GPU パススルー]&lt;br /&gt;
* [https://www.reddit.com/r/VFIO /r/VFIO: VFIOについての subreddit]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=ACPI_%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=19464</id>
		<title>ACPI モジュール</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=ACPI_%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=19464"/>
		<updated>2021-03-03T18:30:05Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:電源管理]]&lt;br /&gt;
[[de:ACPI Module]]&lt;br /&gt;
[[en:ACPI modules]]&lt;br /&gt;
[[es:ACPI modules]]&lt;br /&gt;
[[it:ACPI modules]]&lt;br /&gt;
[[zh-hans:ACPI modules]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|acpid}}&lt;br /&gt;
{{Related|DSDT}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[http://www.acpi.info/ ACPI のサイト] より:&lt;br /&gt;
:&#039;&#039;ACPI (Advanced Configuration and Power Interface) は Hewlett-Packard, Intel, Microsoft, Phoenix, Toshiba によって共同開発されたオープンな工業規格です。&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ACPI モジュールは様々な ACPI パーツに対応するカーネルモジュールです。ACPI モジュールは特殊な ACPI の機能を有効にしたり {{ic|/proc}} や {{ic|/sys}} に情報を追加します。情報は [[acpid]] によって解析されてイベントなどを監視するアプリケーションで使われます。&lt;br /&gt;
&lt;br /&gt;
==利用可能なモジュール==&lt;br /&gt;
以下は ACPI カーネルモジュールの簡単なリストです:&lt;br /&gt;
* ac (電源コネクタの状態)&lt;br /&gt;
* asus-laptop (ASUS/medion のノートパソコンで使用)&lt;br /&gt;
* battery (バッテリーの状態)&lt;br /&gt;
* bay (ドライブベイの状態)&lt;br /&gt;
* button (LID や POWER BUTTON などのボタンイベント)&lt;br /&gt;
* container (コンテナの状態)&lt;br /&gt;
* dock (ドッキングステーションの状態)&lt;br /&gt;
* fan (ファンの状態)&lt;br /&gt;
* i2c_ec (EC SMyBUs ドライバー)&lt;br /&gt;
* thinkpad_acpi (Lenovo ThinkPad ノートパソコンで使用)&lt;br /&gt;
* processor (プロセッサの状態)&lt;br /&gt;
* sbs (スマートバッテリーの状態)&lt;br /&gt;
* thermal (温度センサーの状態)&lt;br /&gt;
* toshiba_acpi (Toshiba ノートパソコンで使用)&lt;br /&gt;
* video (ビデオデバイスの状態)&lt;br /&gt;
&lt;br /&gt;
実行中のカーネルのモジュールリストを表示:&lt;br /&gt;
{{hc|$ ls -l /usr/lib/modules/$(uname -r)/kernel/drivers/acpi|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
total 112&lt;br /&gt;
-rw-r--r-- 1 root root  2808 Aug 29 23:58 ac.ko.gz&lt;br /&gt;
-rw-r--r-- 1 root root  3021 Aug 29 23:58 acpi_ipmi.ko.gz&lt;br /&gt;
-rw-r--r-- 1 root root  3354 Aug 29 23:58 acpi_memhotplug.ko.gz&lt;br /&gt;
-rw-r--r-- 1 root root  4628 Aug 29 23:58 acpi_pad.ko.gz&lt;br /&gt;
drwxr-xr-x 2 root root  4096 Aug 29 23:59 apei&lt;br /&gt;
-rw-r--r-- 1 root root  7120 Aug 29 23:58 battery.ko.gz&lt;br /&gt;
-rw-r--r-- 1 root root  3700 Aug 29 23:58 button.ko.gz&lt;br /&gt;
-rw-r--r-- 1 root root  2181 Aug 29 23:58 container.ko.gz&lt;br /&gt;
-rw-r--r-- 1 root root  1525 Aug 29 23:58 custom_method.ko.gz&lt;br /&gt;
-rw-r--r-- 1 root root  1909 Aug 29 23:58 ec_sys.ko.gz&lt;br /&gt;
-rw-r--r-- 1 root root  2001 Aug 29 23:58 fan.ko.gz&lt;br /&gt;
-rw-r--r-- 1 root root  1532 Aug 29 23:58 hed.ko.gz&lt;br /&gt;
-rw-r--r-- 1 root root  3241 Aug 29 23:58 pci_slot.ko.gz&lt;br /&gt;
-rw-r--r-- 1 root root 17742 Aug 29 23:58 processor.ko.gz&lt;br /&gt;
-rw-r--r-- 1 root root  3073 Aug 29 23:58 sbshc.ko.gz&lt;br /&gt;
-rw-r--r-- 1 root root  7098 Aug 29 23:58 sbs.ko.gz&lt;br /&gt;
-rw-r--r-- 1 root root  6311 Aug 29 23:58 thermal.ko.gz&lt;br /&gt;
-rw-r--r-- 1 root root  8891 Aug 29 23:58 video.ko.gz&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==適切なモジュールの選択== &lt;br /&gt;
どのモジュールがマシンで動作するのか確認してください:&lt;br /&gt;
 # modprobe &amp;lt;yourmodule&amp;gt;&lt;br /&gt;
それから以下のコマンドでモジュールをハードウェアがサポートしているかどうか確認してください:&lt;br /&gt;
 $ dmesg&lt;br /&gt;
{{Tip|grep 検索を使って結果を絞ると良いでしょう。}}&lt;br /&gt;
 $ dmesg | grep acpi&lt;br /&gt;
 [    0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled)&lt;br /&gt;
 [    0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x04] enabled)&lt;br /&gt;
 [    0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled)&lt;br /&gt;
 [    0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x05] enabled)&lt;br /&gt;
 [    0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1])&lt;br /&gt;
 [    0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])&lt;br /&gt;
 [    0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1])&lt;br /&gt;
 [    0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1])&lt;br /&gt;
 [    5.066752] ACPI: acpi_idle yielding to intel_idle&lt;br /&gt;
 [    5.438998] acpi device:04: registered as cooling_device4&lt;br /&gt;
&lt;br /&gt;
動作するモジュールを {{ic|/etc/modules-load.d}} の設定ファイルに追加してください。詳しくは[[カーネルモジュール#/etc/modprobe.d/ 内のファイルを使う]]を参照。&lt;br /&gt;
&lt;br /&gt;
== 情報の取得 == &lt;br /&gt;
バッテリー情報を読み出すには、[[公式リポジトリ]]の {{pkg|acpi}} パッケージを[[インストール]]して次を実行:&lt;br /&gt;
 acpi -i&lt;br /&gt;
&lt;br /&gt;
Linux 2.6.24 から {{ic|/proc}} を使うことで無効になっている ACPI 情報を保存できます。同じデータは {{ic|/sys}} から扱うこともでき、netlink 経由でカーネルからの ACPI イベントを取得できます。例えば、バッテリーの場合:&lt;br /&gt;
 /sys/class/power_supply/BAT0/&lt;br /&gt;
&lt;br /&gt;
==トラブルシューティング==&lt;br /&gt;
===DSDT の修正===&lt;br /&gt;
適切なモジュールをロードしているのに電源管理に問題が発生する場合、Linux フレンドリーではない [https://ja.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface#.E6.A7.8B.E6.88.90.E8.A6.81.E7.B4.A0 DSDT] が原因かもしれません。詳しくは [[DSDT]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===ノートパソコンの ACPI の修正===&lt;br /&gt;
ときどき &amp;quot;ACPI: EC: input buffer is not empty, aborting transaction&amp;quot; と表示されることがあります。これは ACPI の問題で、BIOS の非互換性が原因です。問題を解決する方法は4つあります:&lt;br /&gt;
&lt;br /&gt;
1. BIOS をアップデートする。[[Linux から BIOS を書き換える]]や製造元からの情報を参照してください。&lt;br /&gt;
&lt;br /&gt;
2. [[カーネルパラメータ]]に {{ic|1=acpi=off}} を追加する。ただしバッテリーの充電や省電力機能などの全ての ACPI 機能が使えなくなります。&lt;br /&gt;
&lt;br /&gt;
3. 以下のコマンドを実行し、[[DPMS]] を無効にすることで問題が解決することもあります [https://ubuntuforums.org/showthread.php?p=8030130#10]。ただし、画面の輝度を変更できなくなります。&lt;br /&gt;
 $ xset dpms force off&lt;br /&gt;
&lt;br /&gt;
4. [https://bugs.launchpad.net/ubuntu/+source/linux/+bug/578506 bugs.launchpad.net] にあるパッチを当てて[[カーネル#コンパイル|カーネルをビルド]]する。&lt;br /&gt;
&lt;br /&gt;
ノートパソコンが起動しない場合、AC アダプタとバッテリーを5秒間ほど取り外してからバッテリーを使って再度起動してみてください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [[Wikipedia:ja:Advanced Configuration and Power Interface]]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Stunnel&amp;diff=17802</id>
		<title>Stunnel</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Stunnel&amp;diff=17802"/>
		<updated>2020-09-16T05:26:41Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: Update Related&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Transport Layer Security]]&lt;br /&gt;
[[en:Stunnel]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Transport Layer Security}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[https://www.stunnel.org stunnel] (“Secure Tunnel”) とは:&lt;br /&gt;
: 普遍的な TLS/SSL トンネリングサービスを提供するマルチプラットフォームのアプリケーション。一種のプロキシとして、プログラムのコードに変更を加えることなく既存のクライアントとサーバーに TLS 暗号機能を追加します。セキュリティ・ポータビリティ・スケーラビリティ (ロードバランス含む) を考えて作られており、大規模なシステムでも使えます。[[OpenSSL]] を使用しており、ライセンスは GNU GPL バージョン 2 以降で OpenSSL だけ例外です。&lt;br /&gt;
トンネリングできるのは TCP パケットだけです。[https://www.stunnel.org/faq.html FAQ] には UDP に関する記載があります。[[WireGuard]] は UDP もトンネリング可能です。&lt;br /&gt;
&lt;br /&gt;
認証を使うことで許可したクライアントだけサーバーにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
{{Pkg|stunnel}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
使い方によっては[[Systemd#ユニットファイルの編集|ユニットファイルを編集]]することで[[Systemd#依存関係を解決する|依存関係]]を適切に扱えます。システムの起動時に stunnel を立ち上げたい場合は[[有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
メインの設定ファイルは {{ic|/etc/stunnel/stunnel.conf}} です。ini 形式のファイルとなっています。グローバルセクションとそれぞれのサービスのセクションに分かれています。&lt;br /&gt;
&lt;br /&gt;
クライアントは TLS で暗号化されていないデータを受け取ります。Stunnel は TLS でデータを暗号化して stunnel サーバーに接続します。stunnel サーバーは TLS で暗号化されたデータを受け取って解凍します。それから、データが送られるべきところに接続します。&lt;br /&gt;
&lt;br /&gt;
デフォルトの {{ic|debug}} 値は 5 ですが、出力が多すぎるかもしれません。設定に問題がないと確認できたら、設定ファイルで値を低くすると良いでしょう:&lt;br /&gt;
{{hc|/etc/stunnel/stunnel.conf|2=debug = 3}}&lt;br /&gt;
&lt;br /&gt;
セキュリティを高めるために、グローバルセクションとサービスごとのセクションで、root 以外の適切な uid と gid を明示的に設定することが推奨されます。{{ic|setuid}} と {{ic|setgid}} で設定することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== バイトオーダーマーク (BOM) ===&lt;br /&gt;
設定ファイルには UTF-8 [https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF バイトオーダーマーク (BOM)] がファイルの冒頭に必要です。BOM はユニコード文字 U+FEFF です。UTF-8 表現は (16進数の) バイト順で 0xEF, 0xBB, 0xBF となります。以下のコマンドを実行することでこれらのバイトを書き込んでファイルを作成できます:&lt;br /&gt;
&lt;br /&gt;
 # echo -e &#039;\x&#039;&#039;&#039;ef&#039;&#039;&#039;\x&#039;&#039;&#039;bb&#039;&#039;&#039;\x&#039;&#039;&#039;bf&#039;&#039;&#039;; BOM composed of non printable characters. It is here, before the semicolon!&#039; &amp;gt; /etc/stunnel/stunnel.conf&lt;br /&gt;
&lt;br /&gt;
バイトオーダーマークを確認するには次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=% od --address-radix=n --format=x1c --read-bytes=8 /etc/stunnel/stunnel.conf&lt;br /&gt;
  &#039;&#039;&#039;ef  bb  bf&#039;&#039;&#039;  3b  20  42  4f  4d&lt;br /&gt;
 357 273 277   ;       B   O   M}}&lt;br /&gt;
&lt;br /&gt;
{{ic|cat}} を使ったりテキストエディタでファイルの中身を確認しても、基本的に BOM バイトは表示されません。そのため、上記の {{ic|od}} コマンドなどで確認する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 認証 ===&lt;br /&gt;
&lt;br /&gt;
クライアントのサーバーのどちらか、あるいは両方を認証するようにしてください。事前共有鍵、もしくは鍵と証明書のペアを使うことができます。事前共有鍵は [[SCP と SFTP]] など他の方法を使って必要なマシンに転送してください。転送が可能な場合、事前共有鍵が最速です。事前共有鍵を使用する場合の設定例:&lt;br /&gt;
{{hc|クライアント:/etc/stunnel/stunnel.conf|2=&lt;br /&gt;
; BOM composed of non printable characters. It is here, before the semicolon!&lt;br /&gt;
setuid = stunnel&lt;br /&gt;
setgid = stunnel&lt;br /&gt;
&lt;br /&gt;
[trivial client]&lt;br /&gt;
client     = yes&lt;br /&gt;
accept     = 127.0.0.1:&amp;lt;src_port&amp;gt;&lt;br /&gt;
connect    = &amp;lt;server_host&amp;gt;:&amp;lt;server_port&amp;gt;&lt;br /&gt;
debug      = 3&lt;br /&gt;
PSKsecrets = /etc/stunnel/psk.txt&lt;br /&gt;
setuid     = stunnel&lt;br /&gt;
setgid     = stunnel}}&lt;br /&gt;
&lt;br /&gt;
{{hc|サーバー:/etc/stunnel/stunnel.conf|2=&lt;br /&gt;
; BOM composed of non printable characters. It is here, before the semicolon!&lt;br /&gt;
setuid = stunnel&lt;br /&gt;
setgid = stunnel&lt;br /&gt;
&lt;br /&gt;
[trivial server]&lt;br /&gt;
accept     = &amp;lt;server_port&amp;gt;&lt;br /&gt;
connect    = &amp;lt;dst_port&amp;gt;&lt;br /&gt;
ciphers    = PSK&lt;br /&gt;
debug      = 3&lt;br /&gt;
PSKsecrets = /etc/stunnel/psk.txt&lt;br /&gt;
setuid     = stunnel&lt;br /&gt;
setgid     = stunnel}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/stunnel/psk.txt}} は以下のコマンドで作成できます:&lt;br /&gt;
&lt;br /&gt;
 # openssl rand -base64 -out /etc/stunnel/psk.txt 180&lt;br /&gt;
 # sed --in-place &#039;1s/^/psk:/&#039; /etc/stunnel/psk.txt&lt;br /&gt;
&lt;br /&gt;
どちらか片方のマシンで作成したら別のマシンにコピーしてください。{{ic|psk.txt}} ファイルの[[パーミッション]]は適切に設定してください。{{ic|sed}} コマンドの psk は例としてあげている適当な文字列です。{{man|8|stunnel}} を読んでください。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== DNS over TLS ===&lt;br /&gt;
&lt;br /&gt;
[[BIND]] には問い合わせと回答を暗号化する機能が組み込まれていません。Bind のナレッジベースでは stunnel の使用が提案されています。https://kb.isc.org/docs/aa-01386 を見てください。ページの下部では [[Unbound]] について触れられています。クライアントとサーバーの両方でシェルアカウントしか持っていないユーザーで、リゾルバとネームサーバーが DNS over TLS をサポートしていなくても DNS 通信をトンネル化可能です。&lt;br /&gt;
&lt;br /&gt;
=== Stunnel TLS で NFSv4 を暗号化 ===&lt;br /&gt;
[https://www.linuxjournal.com/content/encrypting-nfsv4-stunnel-tls Encrypting NFSv4 with Stunnel TLS] を見てください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [[Wikipedia:ja:stunnel]]&lt;br /&gt;
* [https://wiki.debian.org/Pan?highlight=%28stunnel%29#SSL_encryption SSL encryption for Pan]&lt;br /&gt;
* [https://www.linuxjournal.com/article/7628 Paranoid Penguin - Rehabilitating Clear-Text Network Applications with Stunnel]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E5%B1%A4%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=17801</id>
		<title>トランスポート層セキュリティ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E5%B1%A4%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=17801"/>
		<updated>2020-09-16T05:17:57Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: Delete Related&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Transport Layer Security]]&lt;br /&gt;
[[en:Transport Layer Security]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|乱数生成}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[[Wikipedia:ja:Transport Layer Security|Wikipedia]] より:&lt;br /&gt;
:&#039;&#039;&#039;Transport Layer Security&#039;&#039;&#039; (&#039;&#039;&#039;TLS&#039;&#039;&#039;) はとその前身[https://tools.ietf.org/html/rfc7568] の &#039;&#039;&#039;Secure Sockets Layer&#039;&#039;&#039; (&#039;&#039;&#039;SSL&#039;&#039;&#039;) はコンピュータネットワークにおいてセキュリティを要求される通信を行うためのプロトコルである。ウェブブラウザやメール、インスタントメッセージ、ボイスオーバー IP (VoIP) などのアプリケーションで幅広く使われているプロトコルとなっている。ウェブサイトは TLS によってサーバーとウェブブラウザ間の通信を暗号化している。&lt;br /&gt;
&lt;br /&gt;
== 実装 ==&lt;br /&gt;
&lt;br /&gt;
[[公式リポジトリ]]には5つの TLS 実装が存在します。OpenSSL と GnuTLS は {{Pkg|base}} パッケージによって必要とされるため、大抵の場合、既にインストールされているはずです。&lt;br /&gt;
&lt;br /&gt;
* {{App|[[OpenSSL]]|堅牢・商業品質・フル機能の TLS と SSL プロトコルのツールキット。汎用の暗号ライブラリでもあります。|https://www.openssl.org/|{{Pkg|openssl}}}}&lt;br /&gt;
* {{App|[[GnuTLS]]|TLS, SSL, DTLS プロトコルのフリーソフトウェア実装。X.509, PKCS #12, OpenPGP などの API を提供します。|https://www.gnutls.org/|{{Pkg|gnutls}}}}&lt;br /&gt;
* {{App|[[Network Security Services]] (NSS)|TLS/SSL と [[Wikipedia:S/MIME|S/MIME]] をサポートする暗号ライブラリの実装。TLS アクセラレーションとスマートカードもサポート。|https://developer.mozilla.org/NSS|{{Pkg|nss}}}}&lt;br /&gt;
* {{App|[[mbed TLS]]|ポータブルな SSL/TLS 実装。別名 PolarSSL。|https://tls.mbed.org/|{{Pkg|mbedtls}}}}&lt;br /&gt;
* {{App|[[Wikipedia:ja:LibreSSL|LibreSSL]]|OpenBSD プロジェクトによって2014年に OpenSSL からフォークされた TLS/crypto スタック。コードベースを近代的に改修してセキュリティを向上させることを目標としています。|https://www.libressl.org/|{{Pkg|libressl}}}}&lt;br /&gt;
&lt;br /&gt;
== 認証局 ==&lt;br /&gt;
&lt;br /&gt;
TLS を使って [[Wikipedia:Certificate authority|認証局]] (CAs) は署名を行ってサーバーの [[Wikipedia:public key certificate|公開鍵証明書]] の信頼性を担保します。TLS でクライアントからサーバーに接続したときは別のパスによって取得した CA 証明書でサーバーの証明書の信頼性を確認します。Arch Linux では認証局の証明書は {{Pkg|ca-certificates}} パッケージに含まれており、{{Pkg|base}} パッケージからインストールされます ([[pacman]] &amp;gt; {{Pkg|curl}} &amp;gt; {{Pkg|ca-certificates}})。依存ツリーは以下のようになっています:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|ca-certificates}}&amp;lt;br&amp;gt;他のパッケージが依存しているアンカーポイント。&lt;br /&gt;
** {{Pkg|ca-certificates-mozilla}}&amp;lt;br&amp;gt;[https://www.mozilla.org/en-US/about/governance/policies/security-group/certs/ Mozilla CA Certificate Store] から生成した {{ic|/usr/share/ca-certificates/trust-source/mozilla.trust.p11-kit}} ファイルのみ含んでいます。NSS の一部でもあります ({{ic|/usr/lib/libnssckbi.so}})。&lt;br /&gt;
*** {{Pkg|ca-certificates-utils}}&amp;lt;br&amp;gt;{{man|8|update-ca-trust}} スクリプトと同名の [[pacman フック]]を提供します。&lt;br /&gt;
**** {{Pkg|p11-kit}}&amp;lt;br&amp;gt;{{man|1|trust}} ユーティリティを提供します。&lt;br /&gt;
&lt;br /&gt;
== 信頼管理 ==&lt;br /&gt;
&lt;br /&gt;
認証局のブラックリストを管理する方法は[[セキュリティ#SSL 証明書の管理]]を見てください。&lt;br /&gt;
&lt;br /&gt;
=== システム全体で認証局を信頼 ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|以下のコマンドを実行すると誰でも秘密鍵にアクセスして TLS 通信を傍受できるようになります。}}&lt;br /&gt;
&lt;br /&gt;
 # trust anchor &#039;&#039;certificate&#039;&#039;.crt&lt;br /&gt;
&lt;br /&gt;
上記は [[プロキシ設定#HTTPS MITM プロキシ|HTTPS MITM プロキシ]]で通信を傍受するのに必要です。&lt;br /&gt;
&lt;br /&gt;
== 証明書を取得 ==&lt;br /&gt;
&lt;br /&gt;
最初に RSA 秘密鍵を生成してください。鍵を生成する前に、[[umask]] でファイルモード作成マスクを制限的に (例えば {{ic|077}}) 設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|openssl}} パッケージは他のディストリビューションと違って {{ic|/etc/ssl/private}} ディレクトリを保護しません。{{Bug|43059}} を参照。}}&lt;br /&gt;
&lt;br /&gt;
証明書は [[Wikipedia:Certificate signing request|証明書署名要求]] (CSR) を使って認証局から取得するか、あるいは [[Wikipedia:Self-signed certificate|自己署名]] することができます。自己署名証明書は簡単に生成できますが、クライアントはデフォルトでは拒否するため、自己署名証明書を信頼するようにクライアントを設定する必要があります。&lt;br /&gt;
&lt;br /&gt;
実際の生成コマンドは以下の実装の記事を見てください:&lt;br /&gt;
&lt;br /&gt;
* [[OpenSSL]]&lt;br /&gt;
* [[GnuTLS#使用方法]]&lt;br /&gt;
* [[Network Security Services]]&lt;br /&gt;
* [[mbed TLS#使用方法]]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[#ACME クライアント|ACME]] を使うことで [https://letsencrypt.org/ Let&#039;s Encrypt] 認証局からフリーの証明書を取得できます。}}&lt;br /&gt;
&lt;br /&gt;
== サーバーサイドの推奨事項 ==&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Transport Layer Security#TLS/SSLの既知の脆弱性|TLS に対する攻撃]] は多数存在するため、ベストプラクティスに注意してください:&lt;br /&gt;
&lt;br /&gt;
* [https://disablessl3.com/ SSLv3 を無効化] することで [[Wikipedia:POODLE|POODLE]] 攻撃を防ぐ。&lt;br /&gt;
* [https://weakdh.org/sysadmin.html weakdh.org の TLS の Diffie-Hellman デプロイガイド]&lt;br /&gt;
* [https://wiki.mozilla.org/Security/Server_Side_TLS Mozilla による Server Side TLS の記事]&lt;br /&gt;
* [https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices SSL Labs の SSL と TLS デプロイベストプラクティス]&lt;br /&gt;
* [https://cipherli.st/ Cipherli.st]&lt;br /&gt;
&lt;br /&gt;
=== TLS のチェック ===&lt;br /&gt;
&lt;br /&gt;
TLS をチェックするプログラム:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|testssl.sh}}&lt;br /&gt;
* [[Nmap]]&lt;br /&gt;
* [[OpenSSL]]&lt;br /&gt;
* [https://github.com/mozilla/cipherscan cipherscan]&lt;br /&gt;
&lt;br /&gt;
TLS をチェックするウェブサイト:&lt;br /&gt;
&lt;br /&gt;
* https://dev.ssllabs.com/ssltest/ (HTTPS のみ)&lt;br /&gt;
* https://www.checktls.com/ (メールのみ)&lt;br /&gt;
* https://www.htbridge.com/ssl/ (任意ポート)&lt;br /&gt;
* https://tls.imirhil.fr/tls (任意ポート)&lt;br /&gt;
&lt;br /&gt;
== その他 ==&lt;br /&gt;
&lt;br /&gt;
=== ACME クライアント ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Automated Certificate Management Environment|Automated Certificate Management Environment]] (ACME) プロトコルは [[Let&#039;s Encrypt]] などの [[Wikipedia:ja:認証局|認証局]] から X.509 証明書をリクエストできるプロトコルです。&lt;br /&gt;
&lt;br /&gt;
[https://letsencrypt.org/docs/client-options/ ACME クライアントの一覧] も参照してください。&lt;br /&gt;
&lt;br /&gt;
* {{App|acme-client|C で書かれたセキュアな Let&#039;s Encrypt クライアント。|https://kristaps.bsd.lv/acme-client/|{{AUR|acme-client}}}}&lt;br /&gt;
* {{App|acme-tiny|Let&#039;s Encrypt から TLS 証明書を作成・更新するための200行の Python スクリプト。|https://github.com/diafygi/acme-tiny|{{Pkg|acme-tiny}}}}&lt;br /&gt;
* {{App|acme.sh|Unix シェルスクリプトだけで作られた ACME クライアント。|https://github.com/Neilpang/acme.sh|{{AUR|acme.sh-git}}}}&lt;br /&gt;
* {{App|acmetool|Go で書かれた使いやすい ACME CLI。|https://github.com/hlandau/acme|{{AUR|acmetool}}, {{AUR|acmetool-git}}}}&lt;br /&gt;
* {{App|[[Certbot]]|Python で書かれた、Let&#039;s Encrypt によって推奨されている ACME クライアント。|https://github.com/certbot/certbot|{{Pkg|certbot}}}}&lt;br /&gt;
* {{App|dehydrated|Bash で書かれた ACME クライアント。|https://github.com/lukas2511/dehydrated|{{Pkg|dehydrated}}, {{AUR|dehydrated-git}}}}&lt;br /&gt;
* {{App|getssl|Bash で書かれた ACME クライアント。|https://github.com/srvrco/getssl|{{AUR|getssl}}, {{AUR|getssl-git}}}}&lt;br /&gt;
* {{App|lego|Go で書かれた Lets Encrypt クライアントと ACME ライブラリ。|https://github.com/xenolf/lego|{{AUR|lego-git}}}}&lt;br /&gt;
* {{App|letsencrypt-cli|もうひとつの Letsencrypt (ACME) クライアント。Ruby を使用。|https://github.com/zealot128/ruby-acme-cli|{{AUR|letsencrypt-cli}}}}&lt;br /&gt;
* {{App|manuale|完全手動の Let&#039;s Encrypt クライアント。Python で書かれています。|https://github.com/veeti/manuale|{{AUR|manuale}}}}&lt;br /&gt;
* {{App|ruby-acme-client|letsencrypt の ACME プロトコルの Ruby クライアント。|https://github.com/unixcharles/acme-client|{{AUR|ruby-acme-client}}}}&lt;br /&gt;
* {{App|simp_le|シンプルな Let&#039;s Encrypt クライアント。Python で書かれています。|https://github.com/zenhack/simp_le|{{AUR|simp_le-git}}}}&lt;br /&gt;
&lt;br /&gt;
=== OCSP ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Online Certificate Status Protocol|Online Certificate Status Protocol]] (OCSP) は [[Firefox]] によってサポートされています。[[Chromium]] は独自のメカニズムを備えています [http://dev.chromium.org/Home/chromium-security/crlsets]。&lt;br /&gt;
&lt;br /&gt;
GnuTLS の {{man|1|ocsptool}} や OpenSSL の {{man|1ssl|ocsp}} も参照。&lt;br /&gt;
&lt;br /&gt;
=== HSTS ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:HTTP Strict Transport Security|HTTP Strict Transport Security]] (HSTS) メカニズムは Firefox, Chromium, [[wget]] ({{ic|~/.wget-hsts}}) によってサポートされています。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/Certificates Gentoo:Certificates]&lt;br /&gt;
* [https://www.happyassassin.net/2015/01/12/a-note-about-ssltls-trusted-certificate-stores-and-platforms/ A note about SSL/TLS trusted certificate stores, and platforms (OpenSSL and GnuTLS)]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Shadowsocks&amp;diff=17799</id>
		<title>Shadowsocks</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Shadowsocks&amp;diff=17799"/>
		<updated>2020-09-15T14:41:51Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: Update Related&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Shadowsocks]]&lt;br /&gt;
[[zh-hans:Shadowsocks]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Trojan}}&lt;br /&gt;
{{Related|乱数生成}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[http://shadowsocks.org Shadowsocks] は軽量な socks5 プロキシです。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|shadowsocks-libev}}(C)/{{Pkg|shadowsocks}}(Python) パッケージを[[インストール]]してください。{{Pkg|shadowsocks-libev}}がおすすめ。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Shadowsocks の設定は JSON フォーマットのファイルを使って行うことができます。パッケージには以下のサンプル設定が含まれています:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/shadowsocks/example.json|{&lt;br /&gt;
    &amp;quot;server&amp;quot;:&amp;quot;my_server_ip&amp;quot;,&lt;br /&gt;
    &amp;quot;server_port&amp;quot;:8388,&lt;br /&gt;
    &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;:1080,&lt;br /&gt;
    &amp;quot;password&amp;quot;:&amp;quot;mypassword&amp;quot;,&lt;br /&gt;
    &amp;quot;timeout&amp;quot;:300,&lt;br /&gt;
    &amp;quot;method&amp;quot;:&amp;quot;chacha20-ietf-poly1305&amp;quot;,&lt;br /&gt;
    &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
    &amp;quot;workers&amp;quot;: 1&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|複数のサーバー IP を指定するときは、{{ic|&amp;quot;server&amp;quot;:[&amp;quot;1.1.1.1&amp;quot;,&amp;quot;2.2.2.2&amp;quot;],}} と指定してください。}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 名前 !! 説明&lt;br /&gt;
|-&lt;br /&gt;
| server || サーバーが listen するアドレス&lt;br /&gt;
|-&lt;br /&gt;
| server_port || サーバーのポート&lt;br /&gt;
|-&lt;br /&gt;
| local_address || ローカルマシンが listen するアドレス&lt;br /&gt;
|-&lt;br /&gt;
| local_port || ローカルマシンのポート&lt;br /&gt;
|-&lt;br /&gt;
| password || 暗号化に使用するパスワード&lt;br /&gt;
|-&lt;br /&gt;
| timeout || 秒数&lt;br /&gt;
|-&lt;br /&gt;
| method || デフォルト: &amp;quot;chacha20-ietf-poly1305&amp;quot;。[https://shadowsocks.org/en/spec/Stream-Ciphers.html Stream Ciphers]/[https://shadowsocks.org/en/spec/AEAD-Ciphers.html AEAD Ciphers] を参照。&lt;br /&gt;
|-&lt;br /&gt;
| fast_open || [https://github.com/clowwindy/shadowsocks/wiki/TCP-Fast-Open TCP-Fast-Open] を使用するかどうか (true / false)&lt;br /&gt;
|-&lt;br /&gt;
| workers || ワーカーの数&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ログ出力レベルを調整したい場合、{{ic|&amp;quot;verbose&amp;quot;: &#039;&#039;value&#039;&#039;}} オプションを追加します。以下の値のどれかを使ってください:&lt;br /&gt;
* 2: 全てをログ出力&lt;br /&gt;
* 1: デバッグ&lt;br /&gt;
* 0: デフォルト&lt;br /&gt;
* -1: 警告&lt;br /&gt;
* -2: エラー&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
==== コマンドラインから使う ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ss-local}} コマンドを使うことでクライアントを起動できます。設定ファイル {{ic|/etc/shadowsocks/config.json}} を使って起動するには:&lt;br /&gt;
 $ ss-local -c /etc/shadowsocks/config.json&lt;br /&gt;
&lt;br /&gt;
または、コマンドで設定を直接指定することも可能です:&lt;br /&gt;
 $ ss-local -s &#039;&#039;server_address&#039;&#039; -p &#039;&#039;server_port&#039;&#039; -l &#039;&#039;local_port&#039;&#039; -k &#039;&#039;password&#039;&#039; -m &#039;&#039;encryption_method&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== systemd を使う ====&lt;br /&gt;
&lt;br /&gt;
Shadowsocks クライアントは {{ic|shadowsocks-libev@.service}} のインスタンスを使って制御することができます。&lt;br /&gt;
&lt;br /&gt;
例えば、設定ファイル {{ic|/etc/shadowsocks/config.json}} を使ってサービスを[[起動]]・[[有効化]]する場合、{{ic|shadowsocks-libev@config.service}} サービスを使ってください。&lt;br /&gt;
&lt;br /&gt;
==== GUI クライアント ====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|shadowsocks-qt5}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
==== コマンドラインから使う ====&lt;br /&gt;
&lt;br /&gt;
サーバーは {{ic|ss-server}} コマンドで起動します。&lt;br /&gt;
&lt;br /&gt;
設定ファイル {{ic|/etc/shadowsocks/config.json}} を使ってフォアグラウンドでサーバーを起動するには:&lt;br /&gt;
 $ ss-server -c /etc/shadowsocks/config.json&lt;br /&gt;
&lt;br /&gt;
バックグラウンドで実行するには:&lt;br /&gt;
{{bc|&lt;br /&gt;
$ ss-server -c /etc/shadowsocks/config.json -d start&lt;br /&gt;
$ ss-server -c /etc/shadowsocks/config.json -d stop}}&lt;br /&gt;
&lt;br /&gt;
==== systemd を使う ====&lt;br /&gt;
&lt;br /&gt;
Shadowsocks サーバーは {{ic|shadowsocks-libev-server@.service}} のインスタンスを使って制御することができます。&lt;br /&gt;
&lt;br /&gt;
例えば、設定ファイル {{ic|/etc/shadowsocks/config.json}} を使ってサービスを[[起動]]・[[有効化]]する場合、{{ic|shadowsocks-libev-server@config.service}} サービスを使ってください。&lt;br /&gt;
&lt;br /&gt;
Shadowsocks で特権ポート (1024 以下) を使うには、root でサーバーを起動する必要があります:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/shadowsocks-libev-server@.service.d/start-as-root.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
User=root&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== 暗号化 ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|python2-m2crypto}} パッケージをインストールすると暗号化が少しだけ高速になります。&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Salsa20 Salsa20] や &#039;&#039;ChaCha20&#039;&#039; 暗号を使いたい場合は {{Pkg|libsodium}} パッケージをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://shadowsocks.org Shadowsocks ウェブサイト]&lt;br /&gt;
* [https://pypi.python.org/pypi/shadowsocks Python パッケージ]&lt;br /&gt;
* [https://github.com/shadowsocks/shadowsocks/wiki GitHub wiki]&lt;br /&gt;
* [https://github.com/shadowsocks-backup/shadowsocks Backup GitHub project] (the original project has been &amp;quot;removed according to regulations&amp;quot; in August 2015)&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Stunnel&amp;diff=17798</id>
		<title>Stunnel</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Stunnel&amp;diff=17798"/>
		<updated>2020-09-15T14:38:24Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: Update Category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Transport Layer Security]]&lt;br /&gt;
[[en:Stunnel]]&lt;br /&gt;
[https://www.stunnel.org stunnel] (“Secure Tunnel”) とは:&lt;br /&gt;
: 普遍的な TLS/SSL トンネリングサービスを提供するマルチプラットフォームのアプリケーション。一種のプロキシとして、プログラムのコードに変更を加えることなく既存のクライアントとサーバーに TLS 暗号機能を追加します。セキュリティ・ポータビリティ・スケーラビリティ (ロードバランス含む) を考えて作られており、大規模なシステムでも使えます。[[OpenSSL]] を使用しており、ライセンスは GNU GPL バージョン 2 以降で OpenSSL だけ例外です。&lt;br /&gt;
トンネリングできるのは TCP パケットだけです。[https://www.stunnel.org/faq.html FAQ] には UDP に関する記載があります。[[WireGuard]] は UDP もトンネリング可能です。&lt;br /&gt;
&lt;br /&gt;
認証を使うことで許可したクライアントだけサーバーにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
{{Pkg|stunnel}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
使い方によっては[[Systemd#ユニットファイルの編集|ユニットファイルを編集]]することで[[Systemd#依存関係を解決する|依存関係]]を適切に扱えます。システムの起動時に stunnel を立ち上げたい場合は[[有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
メインの設定ファイルは {{ic|/etc/stunnel/stunnel.conf}} です。ini 形式のファイルとなっています。グローバルセクションとそれぞれのサービスのセクションに分かれています。&lt;br /&gt;
&lt;br /&gt;
クライアントは TLS で暗号化されていないデータを受け取ります。Stunnel は TLS でデータを暗号化して stunnel サーバーに接続します。stunnel サーバーは TLS で暗号化されたデータを受け取って解凍します。それから、データが送られるべきところに接続します。&lt;br /&gt;
&lt;br /&gt;
デフォルトの {{ic|debug}} 値は 5 ですが、出力が多すぎるかもしれません。設定に問題がないと確認できたら、設定ファイルで値を低くすると良いでしょう:&lt;br /&gt;
{{hc|/etc/stunnel/stunnel.conf|2=debug = 3}}&lt;br /&gt;
&lt;br /&gt;
セキュリティを高めるために、グローバルセクションとサービスごとのセクションで、root 以外の適切な uid と gid を明示的に設定することが推奨されます。{{ic|setuid}} と {{ic|setgid}} で設定することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== バイトオーダーマーク (BOM) ===&lt;br /&gt;
設定ファイルには UTF-8 [https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF バイトオーダーマーク (BOM)] がファイルの冒頭に必要です。BOM はユニコード文字 U+FEFF です。UTF-8 表現は (16進数の) バイト順で 0xEF, 0xBB, 0xBF となります。以下のコマンドを実行することでこれらのバイトを書き込んでファイルを作成できます:&lt;br /&gt;
&lt;br /&gt;
 # echo -e &#039;\x&#039;&#039;&#039;ef&#039;&#039;&#039;\x&#039;&#039;&#039;bb&#039;&#039;&#039;\x&#039;&#039;&#039;bf&#039;&#039;&#039;; BOM composed of non printable characters. It is here, before the semicolon!&#039; &amp;gt; /etc/stunnel/stunnel.conf&lt;br /&gt;
&lt;br /&gt;
バイトオーダーマークを確認するには次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=% od --address-radix=n --format=x1c --read-bytes=8 /etc/stunnel/stunnel.conf&lt;br /&gt;
  &#039;&#039;&#039;ef  bb  bf&#039;&#039;&#039;  3b  20  42  4f  4d&lt;br /&gt;
 357 273 277   ;       B   O   M}}&lt;br /&gt;
&lt;br /&gt;
{{ic|cat}} を使ったりテキストエディタでファイルの中身を確認しても、基本的に BOM バイトは表示されません。そのため、上記の {{ic|od}} コマンドなどで確認する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 認証 ===&lt;br /&gt;
&lt;br /&gt;
クライアントのサーバーのどちらか、あるいは両方を認証するようにしてください。事前共有鍵、もしくは鍵と証明書のペアを使うことができます。事前共有鍵は [[SCP と SFTP]] など他の方法を使って必要なマシンに転送してください。転送が可能な場合、事前共有鍵が最速です。事前共有鍵を使用する場合の設定例:&lt;br /&gt;
{{hc|クライアント:/etc/stunnel/stunnel.conf|2=&lt;br /&gt;
; BOM composed of non printable characters. It is here, before the semicolon!&lt;br /&gt;
setuid = stunnel&lt;br /&gt;
setgid = stunnel&lt;br /&gt;
&lt;br /&gt;
[trivial client]&lt;br /&gt;
client     = yes&lt;br /&gt;
accept     = 127.0.0.1:&amp;lt;src_port&amp;gt;&lt;br /&gt;
connect    = &amp;lt;server_host&amp;gt;:&amp;lt;server_port&amp;gt;&lt;br /&gt;
debug      = 3&lt;br /&gt;
PSKsecrets = /etc/stunnel/psk.txt&lt;br /&gt;
setuid     = stunnel&lt;br /&gt;
setgid     = stunnel}}&lt;br /&gt;
&lt;br /&gt;
{{hc|サーバー:/etc/stunnel/stunnel.conf|2=&lt;br /&gt;
; BOM composed of non printable characters. It is here, before the semicolon!&lt;br /&gt;
setuid = stunnel&lt;br /&gt;
setgid = stunnel&lt;br /&gt;
&lt;br /&gt;
[trivial server]&lt;br /&gt;
accept     = &amp;lt;server_port&amp;gt;&lt;br /&gt;
connect    = &amp;lt;dst_port&amp;gt;&lt;br /&gt;
ciphers    = PSK&lt;br /&gt;
debug      = 3&lt;br /&gt;
PSKsecrets = /etc/stunnel/psk.txt&lt;br /&gt;
setuid     = stunnel&lt;br /&gt;
setgid     = stunnel}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/stunnel/psk.txt}} は以下のコマンドで作成できます:&lt;br /&gt;
&lt;br /&gt;
 # openssl rand -base64 -out /etc/stunnel/psk.txt 180&lt;br /&gt;
 # sed --in-place &#039;1s/^/psk:/&#039; /etc/stunnel/psk.txt&lt;br /&gt;
&lt;br /&gt;
どちらか片方のマシンで作成したら別のマシンにコピーしてください。{{ic|psk.txt}} ファイルの[[パーミッション]]は適切に設定してください。{{ic|sed}} コマンドの psk は例としてあげている適当な文字列です。{{man|8|stunnel}} を読んでください。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== DNS over TLS ===&lt;br /&gt;
&lt;br /&gt;
[[BIND]] には問い合わせと回答を暗号化する機能が組み込まれていません。Bind のナレッジベースでは stunnel の使用が提案されています。https://kb.isc.org/docs/aa-01386 を見てください。ページの下部では [[Unbound]] について触れられています。クライアントとサーバーの両方でシェルアカウントしか持っていないユーザーで、リゾルバとネームサーバーが DNS over TLS をサポートしていなくても DNS 通信をトンネル化可能です。&lt;br /&gt;
&lt;br /&gt;
=== Stunnel TLS で NFSv4 を暗号化 ===&lt;br /&gt;
[https://www.linuxjournal.com/content/encrypting-nfsv4-stunnel-tls Encrypting NFSv4 with Stunnel TLS] を見てください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [[Wikipedia:ja:stunnel]]&lt;br /&gt;
* [https://wiki.debian.org/Pan?highlight=%28stunnel%29#SSL_encryption SSL encryption for Pan]&lt;br /&gt;
* [https://www.linuxjournal.com/article/7628 Paranoid Penguin - Rehabilitating Clear-Text Network Applications with Stunnel]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=17797</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=17797"/>
		<updated>2020-09-15T14:37:41Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: Update Related&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Shadowsocks}}&lt;br /&gt;
{{Related|乱数生成}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384&amp;quot;, &lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: true,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;P-256&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=17796</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=17796"/>
		<updated>2020-09-15T14:37:24Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: Update Related&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Shadowsocks}}&lt;br /&gt;
{{Related|乱数生成&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384&amp;quot;, &lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: true,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;P-256&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=OpenSSH&amp;diff=17795</id>
		<title>OpenSSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=OpenSSH&amp;diff=17795"/>
		<updated>2020-09-15T14:34:47Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: Update Related&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Secure Shell]]&lt;br /&gt;
[[ar:Secure Shell]]&lt;br /&gt;
[[de:SSH]]&lt;br /&gt;
[[en:Secure Shell]]&lt;br /&gt;
[[es:Secure Shell]]&lt;br /&gt;
[[fa:SSH]]&lt;br /&gt;
[[fr:ssh]]&lt;br /&gt;
[[it:Secure Shell]]&lt;br /&gt;
[[ko:Secure Shell]]&lt;br /&gt;
[[pl:Secure Shell]]&lt;br /&gt;
[[pt:Secure Shell]]&lt;br /&gt;
[[ru:Secure Shell]]&lt;br /&gt;
[[sr:Secure Shell]]&lt;br /&gt;
[[zh-hans:Secure Shell]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|SSH 鍵}}&lt;br /&gt;
{{Related|Pam abl}}&lt;br /&gt;
{{Related|fail2ban}}&lt;br /&gt;
{{Related|sshguard}}&lt;br /&gt;
{{Related|Sshfs}}&lt;br /&gt;
{{Related|syslog-ng}}&lt;br /&gt;
{{Related|SFTP chroot}}&lt;br /&gt;
{{Related|SCP と SFTP}}&lt;br /&gt;
{{Related|乱数生成}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
Secure Shell (SSH) は暗号技術を利用して、安全にリモートコンピュータと通信するためのネットワークプロトコルです。暗号によってデータの機密性と完全性が保証されます。SSH は公開鍵暗号を使ってリモートコンピュータを認証し、リモートコンピュータは必要に応じてユーザーを認証します。&lt;br /&gt;
&lt;br /&gt;
基本的に SSH はリモートマシンにログインしてコマンドを実行するために使われますが、トンネリングや TCP ポートや X11 接続の任意のフォワーディングをサポートしており、SFTP や SCP プロトコルを使うことでファイル転送をすることも可能です。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、SSH サーバーは標準の TCP 22番ポートを使います。通常は SSH クライアントプロトコルを使って &#039;&#039;sshd&#039;&#039; デーモンの接続を確立してリモート接続を承認します。macOS, GNU/Linux, Solaris, OpenVMS など近代的なオペレーティングシステムのほとんどでサーバーとクライアントの両方が備わってします。複雑なもの・完全なものまで様々なレベルのバージョンがプロプライエタリ・フリーウェア・オープンソースを問わずに存在します。&lt;br /&gt;
&lt;br /&gt;
== OpenSSH ==&lt;br /&gt;
OpenSSH (OpenBSD Secure Shell) は ssh プロトコルを使ってコンピューターネットワークを介して暗号化通信セッションを提供するコンピュータープログラムのセットです。SSH Communications Security によるプロプライエタリの Secure Shell ソフトウェアスイートに代わるオープンのプログラムとして作成されました。OpenSSH は Theo de Raadt に率いられている OpenBSD プロジェクトの一環として開発されています。&lt;br /&gt;
&lt;br /&gt;
同じような名前の OpenSSL と OpenSSH が混同されることがときどきありますが、プロジェクトの目的・開発チームは異なります。&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH のインストール ===&lt;br /&gt;
[[公式リポジトリ]]から {{Pkg|openssh}} を[[pacman|インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
=== SSH の設定 ===&lt;br /&gt;
====クライアント====&lt;br /&gt;
SSH クライアントの設定ファイルは {{ic|/etc/ssh/ssh_config}} もしくは {{ic|~/.ssh/config}} です。&lt;br /&gt;
&lt;br /&gt;
{{ic|Protocol 2}} を明示的に設定する必要はありません。デフォルトの設定ファイルではコメントアウトされています。つまり明示的に有効にされない限り {{ic|Protocol 1}} は使われません。 (ソース: http://www.openssh.org/txt/release-5.4)&lt;br /&gt;
&lt;br /&gt;
====デーモン====&lt;br /&gt;
SSH デーモンの設定ファイルは {{ic|/etc/ssh/ssh&#039;&#039;&#039;d&#039;&#039;&#039;_config}} です。&lt;br /&gt;
&lt;br /&gt;
特定のユーザーにだけアクセスを許可するには次の行を追加してください:&lt;br /&gt;
 AllowUsers    &#039;&#039;user1 user2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
特定のグループにだけアクセスを許可するには:&lt;br /&gt;
 AllowGroups   &#039;&#039;group1 group2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
SSH による root ログインを無効にするには、PermitRootLogin 行を次のように変更してください:&lt;br /&gt;
 PermitRootLogin no&lt;br /&gt;
&lt;br /&gt;
{{Note|1=バージョン 7.0p1 からは {{ic|PermitRootLogin prohibit-password}} がデフォルトになっています。{{ic|man sshd_config}} を参照。}}&lt;br /&gt;
&lt;br /&gt;
ウェルカムメッセージを追加するには {{ic|/etc/issue}} ファイルを編集して {{ic|Banner}} 行を次のように変更してください:&lt;br /&gt;
 Banner /etc/issue&lt;br /&gt;
&lt;br /&gt;
ホスト鍵は sshd の systemd サービスによって自動的に生成されます。sshd に特定の鍵を使用させたい場合、手動で設定します:&lt;br /&gt;
 HostKey /etc/ssh/ssh_host_rsa_key&lt;br /&gt;
&lt;br /&gt;
サーバーに WAN からアクセスできる場合、デフォルトのポートである 22 から別のランダムなポートに変更することが推奨されています:&lt;br /&gt;
 Port 39901&lt;br /&gt;
&lt;br /&gt;
{{Note|OpenSSH では設定ファイルに &#039;&#039;Port x&#039;&#039; 行を複数記述することで複数のポートを使うことができます。}}&lt;br /&gt;
&lt;br /&gt;
パスワードによるログインを使わないようにすればセキュリティは大幅に向上します。詳しくは [[SSH 鍵#パスワードログインの無効化]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== sshd デーモンの管理 ===&lt;br /&gt;
次のコマンドで sshd デーモンを起動することができます:&lt;br /&gt;
 # systemctl start sshd.service&lt;br /&gt;
&lt;br /&gt;
次のコマンドで sshd デーモンを起動時に有効にすることができます:&lt;br /&gt;
 # systemctl enable sshd.service&lt;br /&gt;
&lt;br /&gt;
詳しくは [[systemd#ユニットを使う]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Systemd は非同期にプロセスを実行します。SSH デーモンを特定の IP アドレス {{ic|ListenAddress 192.168.1.100}} に結びつけている場合、デフォルトの sshd.service ユニットファイルはネットワークインターフェイスが有効にされることに依存していないため、ブート中にロードが失敗する可能性があります。IP アドレスをバインドする時は、カスタムした sshd.service ユニットファイルに {{ic|1=After=network.target}} を追加してください。[[systemd#ユニットファイルの編集]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
また SSH デーモンソケットを有効にすることで初めて接続があったときにデーモンが起動するようにすることもできます:&lt;br /&gt;
 # systemctl start sshd.socket&lt;br /&gt;
 # systemctl enable sshd.socket&lt;br /&gt;
デフォルトの22番以外のポートを使う場合、ユニットファイルを[[systemd#ユニットファイルの編集|編集]]する必要があります:&lt;br /&gt;
{{hc|# systemctl edit sshd.socket|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Socket]&lt;br /&gt;
ListenStream=&lt;br /&gt;
ListenStream=12345&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{ic|sshd.socket}} を使用すると {{ic|ListenAddress}} の設定が打ち消されて、どのアドレスからでも接続できるようになってしまいます。{{ic|ListenAddress}} の設定を適用するには、{{ic|ListenStream}} でポートと IP を指定する必要があります (例: {{ic|1=ListenStream=192.168.1.100:22}})。また、{{ic|[Socket]}} の下に {{ic|1=FreeBind=true}} を追加するようにしてください。そうしないと IP アドレスの設定が {{ic|ListenAddress}} の設定と同じように無効になってしまいます: ネットワークが立ち上がっていない場合にソケットの起動が失敗します。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|ソケットアクティベーションを使う場合、{{ic|sshd.socket}} でもデーモンの標準の {{ic|sshd.service}} でもログの接続試行を監視することはできません。ただし {{ic|# journalctl /usr/bin/sshd}} を実行することで監視できます。}}&lt;br /&gt;
&lt;br /&gt;
=== サーバーに接続する ===&lt;br /&gt;
サーバーに接続するには、次を実行してください:&lt;br /&gt;
 $ ssh -p port &#039;&#039;port&#039;&#039; &#039;&#039;user&#039;&#039;@&#039;&#039;server-address&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== SSH の保護 ===&lt;br /&gt;
管理業務のために SSH によるリモートログインを許可することは良いことですが、サーバーのセキュリティに脅威を及ぼすことにもなりえます。総当り攻撃の標的になりやすいので、SSH のアクセスは制限して、第三者がサーバーにアクセスできないようにする必要があります。&lt;br /&gt;
* わかりにくいアカウント名やパスワードを使う&lt;br /&gt;
* 信頼できる国からの SSH 接続だけを許可する&lt;br /&gt;
* [[fail2ban]] や [[sshguard]] をつかってブルートフォース攻撃を監視し、総当りを起こっている IP を閉め出す&lt;br /&gt;
&lt;br /&gt;
==== ブルートフォースアタックからの保護 ====&lt;br /&gt;
ブルートフォースは単純な攻撃方法です: ランダムなユーザー名とパスワードの組み合わせをとにかく沢山作ってウェブページや SSH などのサーバーログインプロンプトにログインを絶えず試行します。ブルートフォース攻撃からは [[fail2ban]] や [[sshguard]] などの自動スクリプトを使うことで攻撃者をブロックすることで身を守ることができます。[[Uncomplicated Firewall#ufw によるレート制限]]も参照。&lt;br /&gt;
&lt;br /&gt;
もしくは、公開鍵認証を使うことでブルートフォース攻撃を出来なくすることもできます。{{ic|sshd_config}} に次の設定を追加:&lt;br /&gt;
&lt;br /&gt;
 PasswordAuthentication no&lt;br /&gt;
 ChallengeResponseAuthentication no&lt;br /&gt;
&lt;br /&gt;
上の設定を適用する前に、SSH アクセスが必要な全てのアカウントで {{ic|authorized_keys}} ファイルに公開鍵認証の設定をするようにしてください。詳しくは [[SSH 鍵#リモートサーバーに公開鍵をコピー]] を参照。&lt;br /&gt;
&lt;br /&gt;
==== 2段階認証 ====&lt;br /&gt;
&lt;br /&gt;
SSH 鍵のペアによる認証を使用していてパスワードによろうログインを無効化している場合に、2段階認証を使いたいときは [[Google Authenticator]] や [[SSH 鍵#2段階認証と公開鍵]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==== root ログインを制限する ====&lt;br /&gt;
一般的に、SSH で無制限に root ログインを許可することは推奨されません。セキュリティの向上のために、SSH での root ログインを制限する方法は2つ存在します。&lt;br /&gt;
&lt;br /&gt;
===== root ログインを拒否する =====&lt;br /&gt;
&lt;br /&gt;
Sudo を使うことで、root アカウントの認証を行うことなく、必要に応じて root 権限を選択的に付与することができます。このため SSH による root ログインを拒否して、攻撃者にパスワードに加えて (root でない) ユーザー名も推測させる必要を生じさせることで、ブルートフォース攻撃を困難にすることが可能です。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/ssh/sshd_config}} の &amp;quot;Authentication&amp;quot; セクションを編集することで SSH からの root ログインを拒否するように設定できます。{{ic|#PermitRootLogin prohibit-password}} を {{ic|no}} に変更して行をアンコメントしてください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/ssh/sshd_config|&lt;br /&gt;
PermitRootLogin no&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして、SSH デーモンを[[再起動]]してください。&lt;br /&gt;
&lt;br /&gt;
これで、SSH を使って root でログインすることはできなくなります。ただし、通常ユーザーでログインしてから [[su]] や [[sudo]] を使ってシステム管理を行うことは依然として可能です。&lt;br /&gt;
&lt;br /&gt;
===== root ログインを限定する =====&lt;br /&gt;
自動的な作業の中にも、リモートによるフルシステムバックアップなど、root 権限を必要とするものがあります。セキュアな方法で root を許可したい場合、SSH による root ログインを無効化する代わりに、特定のコマンドだけ root ログインを許可することができます。{{ic|~root/.ssh/authorized_keys}} を編集して、以下のように特定のキーの前にコマンドを記述します:&lt;br /&gt;
&lt;br /&gt;
 command=&amp;quot;/usr/lib/rsync/rrsync -ro /&amp;quot; ssh-rsa …&lt;br /&gt;
&lt;br /&gt;
上記の設定で、特定の鍵を使ってログインした場合はクォートで囲ったコマンドを実行できるようになります。&lt;br /&gt;
&lt;br /&gt;
ログイン時に root ユーザーの名前を出すことで攻撃する対象が増えてしまうことに対しては {{ic|sshd_config}} に以下を追加することで埋め合わせができます:&lt;br /&gt;
&lt;br /&gt;
 PermitRootLogin forced-commands-only&lt;br /&gt;
&lt;br /&gt;
上記の設定は root が SSH で実行できるコマンドを制限するだけでなく、パスワードの使用も無効化して、root アカウントでは強制的に公開鍵認証を使うようになります。&lt;br /&gt;
&lt;br /&gt;
root で使えるコマンドは制限しないで公開鍵認証の強制だけをするという手もあり、それでもブルートフォース攻撃はほぼ不可能です。その場合、以下を設定:&lt;br /&gt;
&lt;br /&gt;
 PermitRootLogin without-password&lt;br /&gt;
&lt;br /&gt;
== 他の SSH クライアントとサーバー ==&lt;br /&gt;
OpenSSH の他にも、多数の SSH [[Wikipedia:Comparison of SSH clients|クライアント]] と[[Wikipedia:Comparison of SSH servers|サーバー]]が存在します。&lt;br /&gt;
&lt;br /&gt;
=== Dropbear ===&lt;br /&gt;
[[Wikipedia:Dropbear (software)|Dropbear]] は SSH-2 クライアント・サーバーです。{{Pkg|dropbear}} は[[公式リポジトリ]]から利用可能です。&lt;br /&gt;
&lt;br /&gt;
コマンドラインの ssh クライアントは dbclient という名前が付けられています。&lt;br /&gt;
&lt;br /&gt;
=== Mosh ===&lt;br /&gt;
Mosh の [http://mosh.mit.edu/ ウェブサイト] より:&lt;br /&gt;
&lt;br /&gt;
ローミングが可能で、断続的な接続もサポートしているリモート端末アプリケーションです。ユーザーのキーストロークのローカルエコーと行編集を提供します。Mosh は SSH の代替です。SSH よりも強固でレスポンスが早く、特に Wi-Fi や携帯端末からの接続、長距離通信など通信速度が遅い場合に役に立ちます。&lt;br /&gt;
&lt;br /&gt;
[[公式リポジトリ]]から {{Pkg|mosh}} を[[pacman|インストール]]するか [[Arch User Repository|AUR]] にある最新版 {{AUR|mosh-git}} を使って下さい。&lt;br /&gt;
&lt;br /&gt;
Mosh にはドキュメントに記載されていないコマンドラインオプション {{ic|1=--predict=experimental}} が存在し、よりアグレッシブにローカルのキーストロークのエコーを生成します。キーボード入力が遅延なく確認できるのに興味があるのであればこの prediction モードを使ってみて下さい。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 暗号化 SOCKS トンネル ===&lt;br /&gt;
暗号化トンネルは信頼ができない様々なワイヤレス接続を使用するノートパソコンなどで非常に有用です。必要なのは SSH サーバーが安全な場所 (家や仕事場など) で動作していることだけです。[http://www.dyndns.org/ DynDNS] などのダイナミック DNS サービスを利用すれば IP アドレスを覚える必要もありません。&lt;br /&gt;
&lt;br /&gt;
==== 手順 1: 接続の開始 ====&lt;br /&gt;
以下のコマンドを実行することで接続を開始できます:&lt;br /&gt;
 $ ssh -TND 4711 &#039;&#039;user&#039;&#039;@&#039;&#039;host&#039;&#039;&lt;br /&gt;
{{Ic|&#039;&#039;user&#039;&#039;}} はユーザー名に {{Ic|&#039;&#039;host&#039;&#039;}} は SSH サーバーが動作しているホストに置き換えてください。パスワードを入力すると接続が行われます。{{Ic|N}} フラグはインタラクティブプロンプトを無効化し、{{Ic|D}} フラグは listen するローカルポートを指定します (ポート番号は何でもかまいません)。{{Ic|T}} フラグは疑似 tty アロケーションを無効化します。&lt;br /&gt;
&lt;br /&gt;
verbose ({{Ic|-v}}) フラグを追加することで、接続が成功していることを出力から確認することができます。&lt;br /&gt;
&lt;br /&gt;
==== 手順 2: ブラウザ (やその他のプログラム) の設定 ====&lt;br /&gt;
新しく作成した socks トンネルを使用するようにウェブブラウザ (や他のプログラム) を設定しないと上記の作業は無意味です。最新バージョンの SSH は SOCKS4 と SOCKS5 に対応しているため、どちらかを使うことができます。&lt;br /&gt;
&lt;br /&gt;
* Firefox の場合: &#039;&#039;編集 &amp;amp;rarr; 設定 &amp;amp;rarr; 詳細 &amp;amp;rarr; ネットワーク &amp;amp;rarr; 接続 &amp;amp;rarr; 接続設定&#039;&#039;:&lt;br /&gt;
: ラジオボタンの&#039;&#039;手動でプロキシを設定する&#039;&#039;にチェックを入れて、&#039;&#039;SOCKS ホスト&#039;&#039;テキストフィールドに {{ic|localhost}} と、次のテキストフィールドにポート番号を入力してください (上の例では {{ic|4711}})。&lt;br /&gt;
&lt;br /&gt;
Firefox はデフォルトでは DNS リクエストの作成に socks トンネルを使用しません。以下の手順で設定することでプライバシーを守ることができます:&lt;br /&gt;
&lt;br /&gt;
# Firefox のロケーションバーに about:config と入力。&lt;br /&gt;
# network.proxy.socks_remote_dns を検索。&lt;br /&gt;
# 値を true に設定。&lt;br /&gt;
# ブラウザを再起動。&lt;br /&gt;
&lt;br /&gt;
* Chromium の場合: 環境変数やコマンドラインオプションで SOCKS の設定ができます。以下の関数を {{ic|.bashrc}} に追加することを推奨します:&lt;br /&gt;
 function secure_chromium {&lt;br /&gt;
     port=4711&lt;br /&gt;
     export SOCKS_SERVER=localhost:$port&lt;br /&gt;
     export SOCKS_VERSION=5&lt;br /&gt;
     chromium &amp;amp;&lt;br /&gt;
     exit&lt;br /&gt;
 }&lt;br /&gt;
もしくは:&lt;br /&gt;
 function secure_chromium {&lt;br /&gt;
     port=4711&lt;br /&gt;
     chromium --proxy-server=&amp;quot;socks://localhost:$port&amp;quot; &amp;amp;&lt;br /&gt;
     exit&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
ターミナルから以下のように実行してください:&lt;br /&gt;
 $ secure_chromium&lt;br /&gt;
&lt;br /&gt;
=== X11 フォワーディング ===&lt;br /&gt;
&lt;br /&gt;
X11 フォワーディングはリモートシステムで X11 プログラムを動作させて、グラフィカルインターフェイスをローカルのクライアントマシンで表示させるメカニズムです。X11 フォワーディングではリモートホストに X11 システムを完全にインストールさせる必要はなく、&#039;&#039;xauth&#039;&#039; をインストールするだけで十分です。&#039;&#039;xauth&#039;&#039; は、、X11 セッションの認証を行うために必要なサーバーとクライアントによって使用される {{ic|Xauthority}} の設定を管理するユーティリティです ([http://xmodulo.com/2012/11/how-to-enable-x11-forwarding-using-ssh.html ソース])。&lt;br /&gt;
&lt;br /&gt;
{{Warning|X11 フォワーディングにはセキュリティ的に重要な問題があります。{{ic|ssh}}, {{ic|sshd_config}}, {{ic|ssh_config}} のマニュアルページの該当するセクションを読んで最低限の知識をつけてください。[https://security.stackexchange.com/questions/14815/security-concerns-with-x11-forwarding こちらの記事] も参照。}}&lt;br /&gt;
&lt;br /&gt;
==== セットアップ ====&lt;br /&gt;
&lt;br /&gt;
リモート側:&lt;br /&gt;
&lt;br /&gt;
*[[公式リポジトリ]]から {{Pkg|xorg-xauth}} と {{Pkg|xorg-xhost}} を[[インストール]]&lt;br /&gt;
*{{ic|/etc/ssh/ssh&#039;&#039;&#039;d&#039;&#039;&#039;_config}} 内:&lt;br /&gt;
**{{ic|AllowTcpForwarding}} と {{ic|X11UseLocalhost}} オプションを &#039;&#039;yes&#039;&#039; に設定し、{{ic|X11DisplayOffset}} を &#039;&#039;10&#039;&#039; に設定 (何も変更を加えてなければこの値がデフォルトになっています、{{ic|man sshd_config}} を参照)&lt;br /&gt;
**{{ic|X11Forwarding}} を &#039;&#039;yes&#039;&#039; に設定&lt;br /&gt;
* [[#sshd デーモンの管理|&#039;&#039;sshd&#039;&#039; デーモン]]を[[Systemd#ユニットを使う|再起動]]&lt;br /&gt;
* リモートシステムでも X サーバーを動作させる必要があります。&lt;br /&gt;
&lt;br /&gt;
クライアント側では、接続するたびにコマンドラインで {{ic|-X}} スイッチを指定して {{ic|ForwardX11}} オプションを有効にするか、[[#クライアント|openSSH クライアントの設定ファイル]]で {{ic|ForwardX11}} を &#039;&#039;yes&#039;&#039; に設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|GUI の描画がおかしい場合やエラーが表示されるときは {{ic|ForwardX11Trusted}} オプションを有効にできます (コマンドラインでは {{ic|-Y}} スイッチ)。X11 フォワーディングが [https://www.x.org/wiki/Development/Documentation/Security/ X11 SECURITY 拡張] の制御から外れるようになります。使用するときはセクション冒頭の[[#X11 フォワーディング|警告]]を読んでください。}}&lt;br /&gt;
&lt;br /&gt;
==== 使用方法 ====&lt;br /&gt;
&lt;br /&gt;
通常通り[[#サーバーに接続する|リモートマシンにログイン]]します、クライアント側の設定ファイルで &#039;&#039;ForwardX11&#039;&#039; を有効にしていない場合は {{ic|-X}} スイッチを指定します:&lt;br /&gt;
 $ ssh -X &#039;&#039;user@host&#039;&#039;&lt;br /&gt;
グラフィカルなアプリケーションを実行しようとするとエラーが表示される場合、代わりに &#039;&#039;ForwardX11Trusted&#039;&#039; を試してみて下さい:&lt;br /&gt;
 $ ssh -Y &#039;&#039;user@host&#039;&#039;&lt;br /&gt;
リモートサーバーで X プログラムが起動できるようになったら、出力がローカルセッションに転送されます:&lt;br /&gt;
 $ xclock&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Cannot open display&amp;quot; エラーが表示される場合、root 以外のユーザーで以下のコマンドを実行してみてください:&lt;br /&gt;
 $ xhost +&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは全てのユーザーに X11 アプリケーションの転送を許可します。特定のホストだけに転送を制限するには:&lt;br /&gt;
 $ xhost +hostname&lt;br /&gt;
&lt;br /&gt;
hostname は転送先のホストの名前に置き換えてください。詳しくは {{ic|man xhost}} を参照。&lt;br /&gt;
&lt;br /&gt;
特定のアプリケーションではローカルマシンでインスタンスが動作しているかチェックが実行されます。例えば [[Firefox]] は以下の起動パラメータを使用してローカルマシンでリモートインスタンスを起動する必要があります:&lt;br /&gt;
 $ firefox --no-remote&lt;br /&gt;
&lt;br /&gt;
接続時に &amp;quot;X11 forwarding request failed on channel 0&amp;quot; と表示される場合 (サーバーの {{ic|/var/log/errors.log}} に &amp;quot;Failed to allocate internet-domain X11 display socket&amp;quot; と出力される場合)、{{Pkg|xorg-xauth}} パッケージがインストールされていることを確認してください。上手く機能しない場合、以下の設定を試してみてください:&lt;br /&gt;
&lt;br /&gt;
* サーバーの {{ic|ssh&#039;&#039;&#039;d&#039;&#039;&#039;_config}} で {{ic|AddressFamily any}} オプションを有効にする。&lt;br /&gt;
* サーバーの {{ic|ssh&#039;&#039;&#039;d&#039;&#039;&#039;_config}} で {{ic|AddressFamily}} オプションを inet に設定する。&lt;br /&gt;
IPv4 で Ubuntu クライアントを使っている場合は inet に設定することで問題が解決します。&lt;br /&gt;
&lt;br /&gt;
SSH サーバーの他のユーザーで X アプリケーションを実行するには SSH でログインしているユーザーの {{Ic|xauth list}} の認証行を {{Ic|xauth add}} する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 他のポートのフォワーディング ===&lt;br /&gt;
SSH は X11 をサポートしているだけでなく、TCP 接続のセキュアなトンネル化に使用することもできます。ローカルフォワーディングとリモートフォワーディングの両方が使えます。&lt;br /&gt;
&lt;br /&gt;
ローカルフォワーディングはローカルマシンのポートを開いて、リモートホストに接続が転送されます。転送先をリモートホストと同じにすることで、同一マシンでセキュアな VNC 接続などができます。ローカルフォワーディングは {{Ic|-L}} スイッチで利用することができ {{Ic|&amp;lt;tunnel port&amp;gt;:&amp;lt;destination address&amp;gt;:&amp;lt;destination port&amp;gt;}} という形式で転送先を指定します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh -L 1000:mail.google.com:25 192.168.0.100&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは SSH で 192.168.0.100 にログインしてシェルを開きます。そしてローカルマシンの TCP ポート 1000 から mail.google.com のポート 25 にトンネルが作成されます。接続が確立すると localhost:1000 への通信は Gmail の SMTP ポートに接続されます。Google から見ると、192.168.0.100 から接続が来ているように見えます (必ずしも接続と一緒にデータが運ばれるとは限りません)。データはローカルマシンと 192.168.0.100 の間は安全に運ばれます。&lt;br /&gt;
&lt;br /&gt;
同じように以下のコマンドは localhost:2000 に接続することができ、リモートホストのポート 6001 に透過的に送信されます:&lt;br /&gt;
&lt;br /&gt;
 $ ssh -L 2000:192.168.0.100:6001 192.168.0.100&lt;br /&gt;
&lt;br /&gt;
前者の例はセキュリティ上問題がある ({{AUR|tightvnc}} パッケージに含まれている) vncserver ユーティリティによる VNC 接続などで有用です。&lt;br /&gt;
&lt;br /&gt;
リモートフォワーディングは SSH トンネルとローカルマシンを通してリモートホストから任意のホストに接続できるようにします。ローカルフォワーディングとは逆の機能であり、ファイアウォールによってリモートホストの接続が限られている場合などに有用です。リモートフォワーディングは {{Ic|-R}} スイッチで使うことができ {{Ic|&amp;lt;tunnel port&amp;gt;:&amp;lt;destination address&amp;gt;:&amp;lt;destination port&amp;gt;}} という形式で転送先を指定します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh -R 3000:irc.freenode.net:6667 192.168.0.200&lt;br /&gt;
&lt;br /&gt;
上記のコマンドは 192.168.0.200 にシェルを立ち上げて、192.168.0.200 からローカルホストの3000番ポートへの接続をトンネルを通して送信し、それから irc.freenode.net のポート 6667 に転送します。ポート 6667 がブロックされている場合でもリモートホストから IRC プログラムを利用することができるようになります。&lt;br /&gt;
&lt;br /&gt;
ローカルフォワーディングとリモートフォワーディングはどちらもセキュアなゲートウェイとして使用することができます。{{Ic|&amp;lt;tunnel address&amp;gt;:&amp;lt;tunnel port&amp;gt;:&amp;lt;destination address&amp;gt;:&amp;lt;destination port&amp;gt;}} のようにバインドアドレスをつかうことで、SSH や SSH デーモンを動かしていなくても他のコンピュータが SSH トンネルを利用することが可能です。{{Ic|&amp;lt;tunnel address&amp;gt;}} はトンネルの入り口となるマシンのアドレスです: {{Ic|localhost}}, {{Ic|*}} (あるいは空)。特定のアドレス経由の接続、ループバックインターフェイス経由の接続、全てのインターフェイス経由の接続を許可します。デフォルトでは、フォワーディングはトンネルの入り口のマシンからの接続だけに制限されており {{Ic|&amp;lt;tunnel address&amp;gt;}} は {{Ic|localhost}} に設定されています。ローカルフォワーディングは特に設定が必要ありませんが、リモートフォワーディングはリモートサーバーの SSH デーモンの設定によって制限を受けます。詳しくは {{Ic|sshd_config(5)}} の {{Ic|GatewayPorts}} オプションを見てください。&lt;br /&gt;
&lt;br /&gt;
=== 踏み台ホスト ===&lt;br /&gt;
&lt;br /&gt;
場合によっては、接続先の SSH デーモンに直接接続できず、踏み台サーバー (ジャンプサーバー) を使わざるを得ないことがあります。ふたつ以上の SSH トンネルを接続して、それぞれのサーバーに対してローカルの鍵で認証します。SSH エージェントの転送 ({{ic|-A}}) と疑似端末の割当 ({{ic|-t}}) を使って以下のようにローカルの鍵を転送します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh -A -t -l user1 bastion1 \&lt;br /&gt;
   ssh -A -t -l user2 intermediate2 \&lt;br /&gt;
   ssh -A -t -l user3 target&lt;br /&gt;
&lt;br /&gt;
以下のように {{ic|-J}} フラグを使用することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ ssh -J user1@bastion1,user2@intermediate2 user3@target&lt;br /&gt;
&lt;br /&gt;
{{ic|-J}} ディレクティブで指定するホストはカンマで区切り、指定された順番で接続されます。{{ic|user...@}} の部分は必須ではありません。{{ic|-J}} で指定したホストは ssh の設定ファイルを使うため、必要であればホスト毎にオプションを設定することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== マルチプレクス ===&lt;br /&gt;
&lt;br /&gt;
SSH デーモンは通常はポート 22 番をリッスンします。しかし、公共のインターネット・ホットスポットでは HTTP/HTTPS のポート（80 と 443）以外のトラフィックをブロックしていることが一般的です。そのため SSH 接続がブロックされてしまいます。すぐできる解決策として、許可されているポートで sshd を起動するという方法があります：&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/ssh/sshd_config|&lt;br /&gt;
Port 22&lt;br /&gt;
Port 443&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
しかしポート 443 番は HTTPS を提供する Web サーバにすでに使われていることが多いです。その場合は {{Pkg|sslh}} のようなマルチプレクサを使います。これは指定ポートをリッスンし、そこに来るパケットを複数のサービスに賢く振り分けることができます。&lt;br /&gt;
&lt;br /&gt;
=== SSH の高速化 ===&lt;br /&gt;
&lt;br /&gt;
{{Tip|SSH を SFTP や SCP で使用する場合、{{AUR|openssh-hpn-git}} をインストールすることで転送速度を劇的に上げることができます [https://www.psc.edu/index.php/hpn-ssh]。}}&lt;br /&gt;
&lt;br /&gt;
同一のホストのセッションは全て単一の接続を使うようにすることで、後のログインを劇的に高速化することができます。{{ic|/etc/ssh/ssh_config}} や {{ic|$HOME/.ssh/config}} の適当なホストの下に以下の行を追加してください:&lt;br /&gt;
 ControlMaster auto&lt;br /&gt;
 ControlPersist yes&lt;br /&gt;
 ControlPath ~/.ssh/sockets/socket-%r@%h:%p&lt;br /&gt;
&lt;br /&gt;
{{ic|~/.ssh/sockets}} は他のユーザーが書き込めないディレクトリなら何でもかまいません。&lt;br /&gt;
&lt;br /&gt;
{{ic|ControlPersist}} はクライアントとの接続を閉じるまでにどれくらい待機するか指定します。{{ic|yes}} で永遠に待ち続け、{{ic|no}} で接続を即座に終了します。秒数で指定することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{ic|ControlPersist}} を {{ic|yes}} に設定すると接続が自動的に終了しなくなるので注意してください。}}&lt;br /&gt;
&lt;br /&gt;
速度を向上させる別のオプションとして圧縮を有効化する {{ic|-C}} フラグがあります。{{ic|/etc/ssh/ssh_config}} の適切なホストの下に次の行を追加することで永続的に設定することができます:&lt;br /&gt;
 Compression yes&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{man|1|ssh}} には「モデム接続など接続速度が遅い場合は圧縮の効果がありますが、高速なネットワークではむしろ通信が遅くなります」と書かれています。ネットワーク環境によっては圧縮は逆効果です。}}&lt;br /&gt;
&lt;br /&gt;
ログイン時刻は {{ic|AddressFamily inet}} オプションや {{ic|-4}} フラグを使って IPv6 ルックアップを迂回することで短くできます。&lt;br /&gt;
&lt;br /&gt;
=== SSHFS でリモートファイルシステムをマウントする ===&lt;br /&gt;
sshfs を使って (SSH でアクセスした) リモートのファイルシステムをローカルフォルダにマウントする方法は [[Sshfs]] の記事を参照してください。マウントしたファイルは様々なツールであらゆる操作することができます (コピー、名前の変更、vim で編集など)。基本的に shfs よりも sshfs を使用することを推奨します。sshfs は shfs の新しいバージョンであり、元の shfs は2004年から更新されていません。&lt;br /&gt;
&lt;br /&gt;
=== Keep alive ===&lt;br /&gt;
一定時間操作がないと ssh セッションは自動的にログアウトします。接続を維持するには以下をクライアントの {{ic|~/.ssh/config}} か {{ic|/etc/ssh/ssh_config}} に追加してください:&lt;br /&gt;
&lt;br /&gt;
 ServerAliveInterval 120&lt;br /&gt;
&lt;br /&gt;
これで120秒ごとに &amp;quot;keep alive&amp;quot; シグナルがサーバーに送信されます。{{ic|ServerAliveCountMax}} や {{ic|TCPKeepAlive}} オプションも参照してください。&lt;br /&gt;
&lt;br /&gt;
反対に、外部からの接続を維持するには、次をサーバーの {{ic|/etc/ssh/sshd_config}} に設定します (数字は0より大きく):&lt;br /&gt;
 &lt;br /&gt;
 ClientAliveInterval 120&lt;br /&gt;
&lt;br /&gt;
=== systemd で SSH トンネルを自動的に再起動 ===&lt;br /&gt;
&lt;br /&gt;
[[systemd]] を使ってブート時/ログイン時に SSH 接続を自動的に開始して、接続が失敗した時に再起動させることができます。SSH トンネルの管理に役立つツールとなります。&lt;br /&gt;
&lt;br /&gt;
以下のサービスでは、[[#ssh の設定に接続データを保存する|ssh の設定]]に保存された接続設定を使って、ログイン時に SSH トンネルを開始します。接続が何らかの理由で閉じられた場合、10秒待機してから再起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/systemd/user/tunnel.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=SSH tunnel to myserver&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
Restart=always&lt;br /&gt;
RestartSec=10&lt;br /&gt;
ExecStart=/usr/bin/ssh -F %h/.ssh/config -N myserver&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上記のユーザーサービスを[[有効化]]して[[起動]]してください。トンネルがタイムアウトするのを防ぐ方法は [[#Keep alive]] を見て下さい。起動時にトンネルを開始したい場合、ユニットをシステムサービスとして書きなおして下さい。&lt;br /&gt;
&lt;br /&gt;
=== Autossh - SSH セッションとトンネルの自動再起動 ===&lt;br /&gt;
ネットワークの状態が悪かったりしてクライアントが切断してしまい、セッションやトンネルの接続を維持できない場合、{{Pkg|autossh}} を使って自動的にセッションとトンネルを再起動できます。&lt;br /&gt;
&lt;br /&gt;
使用例:&lt;br /&gt;
 $ autossh -M 0 -o &amp;quot;ServerAliveInterval 45&amp;quot; -o &amp;quot;ServerAliveCountMax 2&amp;quot; username@example.com&lt;br /&gt;
[[sshfs]] を組み合わせる:&lt;br /&gt;
 $ sshfs -o reconnect,compression=yes,transform_symlinks,ServerAliveInterval=45,ServerAliveCountMax=2,ssh_command=&#039;autossh -M 0&#039; username@example.com: /mnt/example &lt;br /&gt;
[[プロキシ設定]]で設定した SOCKS プロクシを使って接続:&lt;br /&gt;
 $ autossh -M 0 -o &amp;quot;ServerAliveInterval 45&amp;quot; -o &amp;quot;ServerAliveCountMax 2&amp;quot; -NCD 8080 username@example.com &lt;br /&gt;
{{ic|-f}} オプションで autossh をバックグラウンドプロセスとして実行することができます。ただし対話式でパスフレーズを入力することができなくなります。&lt;br /&gt;
&lt;br /&gt;
セッション中に {{ic|exit}} と入力したり autossh プロセスに SIGTERM, SIGINT, SIGKILL 信号が送られるとセッションは終了します。&lt;br /&gt;
&lt;br /&gt;
==== systemd を使ってブート時に自動的に autossh を起動する ====&lt;br /&gt;
autossh を自動的に起動したい場合、以下の systemd ユニットファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/autossh.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=AutoSSH service for port 2222&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;AUTOSSH_GATETIME=0&amp;quot;&lt;br /&gt;
ExecStart=/usr/bin/autossh -M 0 -NL 2222:localhost:2222 -o TCPKeepAlive=yes foo@bar.com&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|1=AUTOSSH_GATETIME=0}} は接続が成功して ssh が立ち上がったと autossh が認識する秒数です。0に設定すると autossh は ssh の最初の起動失敗を無視します。起動時に autossh を実行する場合は設定するべきです。他の環境変数は man ページを見てください。必要であればもっと複雑に設定することもできますが、{{ic|1=AUTOSSH_GATETIME=0}} を含む {{ic|-f}} は systemd では機能しません。&lt;br /&gt;
&lt;br /&gt;
設定後はサービスを[[起動]]・[[有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
以下のように ControlMaster を無効化する必要もあるかもしれません:&lt;br /&gt;
&lt;br /&gt;
 ExecStart=/usr/bin/autossh -M 0 -o ControlMaster=no -NL 2222:localhost:2222 -o TCPKeepAlive=yes foo@bar.com&lt;br /&gt;
&lt;br /&gt;
{{Tip|複数のautosshプロセスを維持し、複数のトンネルを存続させることも簡単です。名前の異なる複数のサービスファイルを作成するだけです。}}&lt;br /&gt;
&lt;br /&gt;
== ソケットアクティベーションで SSH ポート番号を変更する (sshd.socket) ==&lt;br /&gt;
&lt;br /&gt;
次の内容で {{ic|/etc/systemd/system/sshd.socket.d/port.conf}} ファイルを作成:&lt;br /&gt;
&lt;br /&gt;
 [Socket]&lt;br /&gt;
 # Disable default port&lt;br /&gt;
 ListenStream=&lt;br /&gt;
 # Set new port&lt;br /&gt;
 ListenStream=12345&lt;br /&gt;
&lt;br /&gt;
リロードすれば systemd は自動的に新しいポートを開きます:&lt;br /&gt;
&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
=== チェックリスト ===&lt;br /&gt;
&lt;br /&gt;
以下は最初に行うべきトラブルシューティングのチェックリストです。何かする前に以下の問題をチェックすることを推奨します。&lt;br /&gt;
&lt;br /&gt;
# 設定ディレクトリ {{ic|~/.ssh}} の中身がユーザーからアクセスできることを確認する (クライアントとサーバーの両方で確認してください): {{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ chmod 700 ~/.ssh&lt;br /&gt;
$ chmod 600 ~/.ssh/*&lt;br /&gt;
$ chown -R $USER ~/.ssh&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
# クライアントの公開鍵 (例: {{ic|id_rsa.pub}}) がサーバーの {{ic|~/.ssh/authorized_keys}} に存在することを確認する。&lt;br /&gt;
# [[#デーモン|サーバーの設定]]で {{ic|AllowUsers}} や {{ic|AllowGroups}} によって SSH によるアクセスが制限されていることを確認する。&lt;br /&gt;
# ユーザーにパスワードが設定されていることを確認する。新しいユーザーにはパスワードが設定されていない可能性があります。&lt;br /&gt;
# {{ic|sshd}} を再起動してクライアントとサーバーの両方で一度ログアウトをしてみる。&lt;br /&gt;
&lt;br /&gt;
=== 電源オフ/再起動した後も SSH 接続が残ってしまう ===&lt;br /&gt;
systemd が sshd の前に network を停止してしまうと電源を切った後も SSH 接続が繋がったままになります。この問題を修正するには、{{ic|After}} ステートメントを修正してください:&lt;br /&gt;
{{hc|# systemctl edit systemd-user-sessions.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
After=network.target}}&lt;br /&gt;
&lt;br /&gt;
=== 接続が拒否されるまたはタイムアウトする ===&lt;br /&gt;
&lt;br /&gt;
==== ルーターがポートフォワーディングをしていないか？ ====&lt;br /&gt;
&lt;br /&gt;
NAT モードやルーターを使っている場合、ルーターが ssh 接続を転送していないか確認してください。サーバーの内部 IP アドレスは {{ic|$ ip addr}} で確認することができるので、SSH ポートの TCP をその IP に転送するようにルーターを設定してください。[http://portforward.com portforward.com] も役に立ちます。&lt;br /&gt;
&lt;br /&gt;
==== SSH が動作しているか？ ====&lt;br /&gt;
 $ ss -tnlp&lt;br /&gt;
&lt;br /&gt;
上記のコマンドで SSH ポートが開いていると表示されない場合、SSH は動作していません。{{ic|/var/log/messages}} にエラーがないか確認してください。&lt;br /&gt;
&lt;br /&gt;
==== 接続をブロックするようなファイアウォールのルールが存在しないか？ ====&lt;br /&gt;
&lt;br /&gt;
[[iptables]] によってポート {{ic|22}} の接続がブロックされている可能性があります。次のコマンドで確認してください:&lt;br /&gt;
{{bc|# iptables -nvL}}&lt;br /&gt;
{{ic|INPUT}} チェインのパケットを拒否するようなルールがないか見て下さい。そして、必要であれば、次のようなコマンドでポートのブロックを解除します:&lt;br /&gt;
{{bc|&lt;br /&gt;
# iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT&lt;br /&gt;
}}&lt;br /&gt;
ファイアウォールの設定に関する詳細は[[ファイアウォール]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==== トラフィックがコンピュータにまで到達しているか？ ====&lt;br /&gt;
以下のように問題のコンピュータのトラフィックを収集してみてください:&lt;br /&gt;
&lt;br /&gt;
 # tcpdump -lnn -i any port ssh and tcp-syn&lt;br /&gt;
&lt;br /&gt;
上記は基本的な情報を表示します。トラフィックが表示されるまで待ってください。その後、接続を試行してみてください。何も出力がされない場合、コンピュータの外側にある何かがトラフィックを妨害しています (例: ハードウェアファイアウォールや NAT ルーターなど)。&lt;br /&gt;
&lt;br /&gt;
==== ISP またはサードパーティによってデフォルトのポートがブロックされてないか？ ====&lt;br /&gt;
{{Note|このステップは次のことを確認した後で実行してください。ファイアーウォールを何も起動していないこと。DMZ へのルーターを正しく設定している、またはコンピュータへポートを転送していること。それでもまだ動かない場合、ここで診断のステップと解決法が見つかるでしょう。}}&lt;br /&gt;
&lt;br /&gt;
ときどき ISP (インターネット・サービス・プロバイダ) が SSH のデフォルトポート (22番) をブロックしている場合があります。この場合はあなたが何をしても (ポートを開ける、スタックを強化する、フラッドアタックを防御する、など) 無意味になります。ブロックされているかどうか確認するために、全てのインターフェイス (0.0.0.0) をリッスンする sshd を立ち上げ、リモートから接続してみます。&lt;br /&gt;
&lt;br /&gt;
このようなエラーメッセージが出る場合：&lt;br /&gt;
 ssh: connect to host www.inet.hr port 22: Connection refused&lt;br /&gt;
&lt;br /&gt;
これはそのポートが ISP にブロックされていないが、そのポートでサーバーの SSH が起動していないことを意味します ([[wikipedia:Security_through_obscurity|security through obscurity]] を参照)。&lt;br /&gt;
&lt;br /&gt;
しかし、次のようなエラーメッセージが出る場合：&lt;br /&gt;
 ssh: connect to host 111.222.333.444 port 22: Operation timed out &lt;br /&gt;
&lt;br /&gt;
これは何かがポート 22 での TCP トラフィックを拒否 (reject) していることを意味します。そのポートはあなたのサーバー上のファイアーウォールか第三者 (ISP など) のどちらかによってステルスされています。自分のサーバーでファイアーウォールが起動していないことが確かなら、また、ルーターやスイッチの中でグレムリンが育っていないことが確かなら、ISP がトラフィックをブロックしています。&lt;br /&gt;
&lt;br /&gt;
ダブルチェックのために、サーバ上で Wireshark を起動してポート 22 でのトラフィックをリッスンしてみましょう。Wireshark はレイヤ 2 のパケット・スニファリング・ユーティリティであり、TCP/UDP はレイヤ 3 以上なので ([[wikipedia:ja:インターネット・プロトコル・スイート|IP ネットワークスタック]]を参照)、もしリモートから接続するときに何も受け取っていなければ、十中八九、第三者がブロックしています。&lt;br /&gt;
&lt;br /&gt;
===== 問題診断 =====&lt;br /&gt;
{{Pkg|tcpdump}} または {{Pkg|wireshark-cli}} パッケージの Wireshark を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
tcpdump の場合:&lt;br /&gt;
 # tcpdump -ni &#039;&#039;interface&#039;&#039; &amp;quot;port 22&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Wireshark の場合:&lt;br /&gt;
 $ tshark -f &amp;quot;tcp port 22&amp;quot; -i &#039;&#039;interface&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;interface&#039;&#039;}} は WAN 接続に使っているネットワークインターフェイスに置き換えてください (確認したいときは {{ic|ip a}} を実行)。リモートで接続を試行してもパケットが全く受け取れない場合、ISP によってポート 22 のトラフィックがブロックされている可能性があります。&lt;br /&gt;
&lt;br /&gt;
===== 解決方法 =====&lt;br /&gt;
解決方法は、単に ISP がブロックしていない他のポートを使うことです。{{ic|/etc/ssh/sshd_config}} を編集して他のポートを使うようにしましょう。例えば次を追加します：&lt;br /&gt;
&lt;br /&gt;
 Port 22&lt;br /&gt;
 Port 1234&lt;br /&gt;
&lt;br /&gt;
そしてこのファイル中の他の Port 設定をコメントアウトします。「Port 22」をコメントにして「Port 1234」を追加するだけでは、sshd がポート 1234 しかリッスンしなくなるので、この問題は解決しません。この 2 行どちらも使用し、sshd が両方のポートをリッスンするようにします。&lt;br /&gt;
&lt;br /&gt;
あとは {{ic|systemctl restart sshd.service}} で sshd を起動するだけです。そして ssh クライアントでも同じポートに変更します。&lt;br /&gt;
&lt;br /&gt;
==== Read from socket failed: connection reset by peer ====&lt;br /&gt;
最近の openssh のバージョンでは、楕円曲線暗号関連のバグのせいで、上記のエラーメッセージで接続が失敗することがあります。その場合 {{ic|~/.ssh/config}} に次の行を追加してください:&lt;br /&gt;
&lt;br /&gt;
 HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-rsa,ssh-dss&lt;br /&gt;
&lt;br /&gt;
openssh 5.9 では、上記の修正方法は働きません。代わりに、{{ic|~/.ssh/config}} に以下の行を記述してください:&lt;br /&gt;
&lt;br /&gt;
 Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc &lt;br /&gt;
 MACs hmac-md5,hmac-sha1,hmac-ripemd160&lt;br /&gt;
&lt;br /&gt;
openssh バグフォーラムの [http://www.gossamer-threads.com/lists/openssh/dev/51339 議論] も参照。&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;[your shell]: No such file or directory&amp;quot; / ssh_exchange_identification 問題 ===&lt;br /&gt;
シェルのバイナリに {{Ic|$PATH}} が通っている場合でも、特定の SSH クライアントは {{Ic|$SHELL}} に絶対パスを設定する必要があります (パスは {{Ic|whereis -b [your shell]}} で確認できます)。&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Terminal unknown&amp;quot; や &amp;quot;Error opening terminal&amp;quot; エラーメッセージ===&lt;br /&gt;
ssh でログイン時に &amp;quot;Terminal unknown&amp;quot; のようなエラーが表示されることがあります。これはサーバーがターミナルを認識できていないことを意味します。また、nano などの ncurses アプリケーションを実行すると &amp;quot;Error opening terminal&amp;quot; というメッセージが表示されます。&lt;br /&gt;
&lt;br /&gt;
クライアントで使用しているターミナルの terminfo ファイルをサーバーにインストールするのが正しい解決方法です。これによってサーバーのコンソールプログラムがターミナルを正しく扱えるようになります。{{ic|infocmp}} を実行してから[[Pacman#パッケージ・データベースに問い合わせる|パッケージを確認]]することで terminfo に関する情報を取得できます。&lt;br /&gt;
&lt;br /&gt;
通常の方法でファイルを[[インストール]]できない場合、サーバーのホームディレクトリに terminfo をコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 $ ssh myserver mkdir -p  ~/.terminfo/${TERM:0:1}&lt;br /&gt;
 $ scp /usr/share/terminfo/${TERM:0:1}/$TERM myserver:~/.terminfo/${TERM:0:1}/&lt;br /&gt;
&lt;br /&gt;
サーバーから一度ログアウトしてからログインしなおすと問題が解決しているはずです。&lt;br /&gt;
&lt;br /&gt;
====$TERM 変数を設定する解決策====&lt;br /&gt;
&lt;br /&gt;
{{Warning|この方法はあくまで次善策であり、たまにしか接続しない ssh サーバーで使うようにしてください。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.bash_profile}} などで {{ic|1=TERM=xterm}} と設定することでもエラーが表示されなくなり、ncurses アプリケーションが動作するようになります。ただし副作用があり、ターミナルの制御シーケンスが xterm と異なっている場合グラフィックがおかしくなります。&lt;br /&gt;
&lt;br /&gt;
=== Connection closed by x.x.x.x [preauth] ===&lt;br /&gt;
sshd のログでこのエラーが確認できる場合、HostKey が正しく設定されているか確認してください:&lt;br /&gt;
 HostKey /etc/ssh/ssh_host_rsa_key&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH 7.0 によって id_dsa が拒否される ===&lt;br /&gt;
&lt;br /&gt;
OpenSSH 7.0 ではセキュリティ上の理由から ssh-dss が無効になっています。どうしても有効にする必要がある場合、クライアントの設定オプションを使用してください ([http://www.openssh.com/legacy.html] には書かれていない方法です):&lt;br /&gt;
&lt;br /&gt;
 PubkeyAcceptedKeyTypes +ssh-dss&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH 7.0 で No matching key exchange method found ===&lt;br /&gt;
&lt;br /&gt;
OpenSSH 7.0 では Logjam 攻撃からの（理論上の）脆弱性を理由に diffie-hellman-group1-sha1 鍵アルゴリズムが無効になっています (http://www.openssh.com/legacy.html を参照)。特定のホストで鍵アルゴリズムが必要な場合、ssh は以下のようなエラーメッセージを吐きます:&lt;br /&gt;
&lt;br /&gt;
 Unable to negotiate with 127.0.0.1: no matching key exchange method found.&lt;br /&gt;
 Their offer: diffie-hellman-group1-sha1&lt;br /&gt;
&lt;br /&gt;
古いアルゴリズムを使用しないようにサーバーをアップグレード・設定することで上記のエラーは解決します。サーバー側の設定を変更できない場合、クライアント設定で {{ic|KexAlgorithms +diffie-hellman-group1-sha1}} オプションを使うことでアルゴリズムを有効化できます。&lt;br /&gt;
&lt;br /&gt;
=== SSH から切断したときに tmux/screen セッションが終了する ===&lt;br /&gt;
&lt;br /&gt;
セッションの最後にプロセスが終了する場合、ソケットアクティベーションを使っているために SSH セッションプロセスが終了したときに {{Pkg|systemd}} によって終了されている可能性があります。{{ic|ssh.socket}} の代わりに {{ic|ssh.service}} を使用してソケットアクティベーションを使わないことで解決できます。もしくは {{ic|ssh@.service}} の Service セクションで {{ic|1=KillMode=process}} を設定してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|1=KillMode=process}} は古典的な {{ic|ssh.service}} でも役に立つことがあります。サーバーが停止したり再起動したときに SSH セッションプロセスや {{Pkg|screen}} や {{Pkg|tmux}} のプロセスが終了されることを防ぐことができます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
*[http://www.la-samhna.de/library/brutessh.html Defending against brute force ssh attacks]&lt;br /&gt;
*IBM developerWorks の [https://www.ibm.com/developerworks/jp/linux/library/l-keyc/ OpenSSH キー （鍵） の管理: 第 1 回] と [https://www.ibm.com/developerworks/jp/linux/library/l-keyc2/ 第 2 回]&lt;br /&gt;
* [https://stribika.github.io/2015/01/04/secure-secure-shell.html Secure Secure Shell]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E5%B1%A4%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=17794</id>
		<title>トランスポート層セキュリティ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E5%B1%A4%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=17794"/>
		<updated>2020-09-15T14:32:53Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: Update Related&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Transport Layer Security]]&lt;br /&gt;
[[en:Transport Layer Security]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|stunnel}}&lt;br /&gt;
{{Related|乱数生成}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[[Wikipedia:ja:Transport Layer Security|Wikipedia]] より:&lt;br /&gt;
:&#039;&#039;&#039;Transport Layer Security&#039;&#039;&#039; (&#039;&#039;&#039;TLS&#039;&#039;&#039;) はとその前身[https://tools.ietf.org/html/rfc7568] の &#039;&#039;&#039;Secure Sockets Layer&#039;&#039;&#039; (&#039;&#039;&#039;SSL&#039;&#039;&#039;) はコンピュータネットワークにおいてセキュリティを要求される通信を行うためのプロトコルである。ウェブブラウザやメール、インスタントメッセージ、ボイスオーバー IP (VoIP) などのアプリケーションで幅広く使われているプロトコルとなっている。ウェブサイトは TLS によってサーバーとウェブブラウザ間の通信を暗号化している。&lt;br /&gt;
&lt;br /&gt;
== 実装 ==&lt;br /&gt;
&lt;br /&gt;
[[公式リポジトリ]]には5つの TLS 実装が存在します。OpenSSL と GnuTLS は {{Pkg|base}} パッケージによって必要とされるため、大抵の場合、既にインストールされているはずです。&lt;br /&gt;
&lt;br /&gt;
* {{App|[[OpenSSL]]|堅牢・商業品質・フル機能の TLS と SSL プロトコルのツールキット。汎用の暗号ライブラリでもあります。|https://www.openssl.org/|{{Pkg|openssl}}}}&lt;br /&gt;
* {{App|[[GnuTLS]]|TLS, SSL, DTLS プロトコルのフリーソフトウェア実装。X.509, PKCS #12, OpenPGP などの API を提供します。|https://www.gnutls.org/|{{Pkg|gnutls}}}}&lt;br /&gt;
* {{App|[[Network Security Services]] (NSS)|TLS/SSL と [[Wikipedia:S/MIME|S/MIME]] をサポートする暗号ライブラリの実装。TLS アクセラレーションとスマートカードもサポート。|https://developer.mozilla.org/NSS|{{Pkg|nss}}}}&lt;br /&gt;
* {{App|[[mbed TLS]]|ポータブルな SSL/TLS 実装。別名 PolarSSL。|https://tls.mbed.org/|{{Pkg|mbedtls}}}}&lt;br /&gt;
* {{App|[[Wikipedia:ja:LibreSSL|LibreSSL]]|OpenBSD プロジェクトによって2014年に OpenSSL からフォークされた TLS/crypto スタック。コードベースを近代的に改修してセキュリティを向上させることを目標としています。|https://www.libressl.org/|{{Pkg|libressl}}}}&lt;br /&gt;
&lt;br /&gt;
== 認証局 ==&lt;br /&gt;
&lt;br /&gt;
TLS を使って [[Wikipedia:Certificate authority|認証局]] (CAs) は署名を行ってサーバーの [[Wikipedia:public key certificate|公開鍵証明書]] の信頼性を担保します。TLS でクライアントからサーバーに接続したときは別のパスによって取得した CA 証明書でサーバーの証明書の信頼性を確認します。Arch Linux では認証局の証明書は {{Pkg|ca-certificates}} パッケージに含まれており、{{Pkg|base}} パッケージからインストールされます ([[pacman]] &amp;gt; {{Pkg|curl}} &amp;gt; {{Pkg|ca-certificates}})。依存ツリーは以下のようになっています:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|ca-certificates}}&amp;lt;br&amp;gt;他のパッケージが依存しているアンカーポイント。&lt;br /&gt;
** {{Pkg|ca-certificates-mozilla}}&amp;lt;br&amp;gt;[https://www.mozilla.org/en-US/about/governance/policies/security-group/certs/ Mozilla CA Certificate Store] から生成した {{ic|/usr/share/ca-certificates/trust-source/mozilla.trust.p11-kit}} ファイルのみ含んでいます。NSS の一部でもあります ({{ic|/usr/lib/libnssckbi.so}})。&lt;br /&gt;
*** {{Pkg|ca-certificates-utils}}&amp;lt;br&amp;gt;{{man|8|update-ca-trust}} スクリプトと同名の [[pacman フック]]を提供します。&lt;br /&gt;
**** {{Pkg|p11-kit}}&amp;lt;br&amp;gt;{{man|1|trust}} ユーティリティを提供します。&lt;br /&gt;
&lt;br /&gt;
== 信頼管理 ==&lt;br /&gt;
&lt;br /&gt;
認証局のブラックリストを管理する方法は[[セキュリティ#SSL 証明書の管理]]を見てください。&lt;br /&gt;
&lt;br /&gt;
=== システム全体で認証局を信頼 ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|以下のコマンドを実行すると誰でも秘密鍵にアクセスして TLS 通信を傍受できるようになります。}}&lt;br /&gt;
&lt;br /&gt;
 # trust anchor &#039;&#039;certificate&#039;&#039;.crt&lt;br /&gt;
&lt;br /&gt;
上記は [[プロキシ設定#HTTPS MITM プロキシ|HTTPS MITM プロキシ]]で通信を傍受するのに必要です。&lt;br /&gt;
&lt;br /&gt;
== 証明書を取得 ==&lt;br /&gt;
&lt;br /&gt;
最初に RSA 秘密鍵を生成してください。鍵を生成する前に、[[umask]] でファイルモード作成マスクを制限的に (例えば {{ic|077}}) 設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|openssl}} パッケージは他のディストリビューションと違って {{ic|/etc/ssl/private}} ディレクトリを保護しません。{{Bug|43059}} を参照。}}&lt;br /&gt;
&lt;br /&gt;
証明書は [[Wikipedia:Certificate signing request|証明書署名要求]] (CSR) を使って認証局から取得するか、あるいは [[Wikipedia:Self-signed certificate|自己署名]] することができます。自己署名証明書は簡単に生成できますが、クライアントはデフォルトでは拒否するため、自己署名証明書を信頼するようにクライアントを設定する必要があります。&lt;br /&gt;
&lt;br /&gt;
実際の生成コマンドは以下の実装の記事を見てください:&lt;br /&gt;
&lt;br /&gt;
* [[OpenSSL]]&lt;br /&gt;
* [[GnuTLS#使用方法]]&lt;br /&gt;
* [[Network Security Services]]&lt;br /&gt;
* [[mbed TLS#使用方法]]&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[#ACME クライアント|ACME]] を使うことで [https://letsencrypt.org/ Let&#039;s Encrypt] 認証局からフリーの証明書を取得できます。}}&lt;br /&gt;
&lt;br /&gt;
== サーバーサイドの推奨事項 ==&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Transport Layer Security#TLS/SSLの既知の脆弱性|TLS に対する攻撃]] は多数存在するため、ベストプラクティスに注意してください:&lt;br /&gt;
&lt;br /&gt;
* [https://disablessl3.com/ SSLv3 を無効化] することで [[Wikipedia:POODLE|POODLE]] 攻撃を防ぐ。&lt;br /&gt;
* [https://weakdh.org/sysadmin.html weakdh.org の TLS の Diffie-Hellman デプロイガイド]&lt;br /&gt;
* [https://wiki.mozilla.org/Security/Server_Side_TLS Mozilla による Server Side TLS の記事]&lt;br /&gt;
* [https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices SSL Labs の SSL と TLS デプロイベストプラクティス]&lt;br /&gt;
* [https://cipherli.st/ Cipherli.st]&lt;br /&gt;
&lt;br /&gt;
=== TLS のチェック ===&lt;br /&gt;
&lt;br /&gt;
TLS をチェックするプログラム:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|testssl.sh}}&lt;br /&gt;
* [[Nmap]]&lt;br /&gt;
* [[OpenSSL]]&lt;br /&gt;
* [https://github.com/mozilla/cipherscan cipherscan]&lt;br /&gt;
&lt;br /&gt;
TLS をチェックするウェブサイト:&lt;br /&gt;
&lt;br /&gt;
* https://dev.ssllabs.com/ssltest/ (HTTPS のみ)&lt;br /&gt;
* https://www.checktls.com/ (メールのみ)&lt;br /&gt;
* https://www.htbridge.com/ssl/ (任意ポート)&lt;br /&gt;
* https://tls.imirhil.fr/tls (任意ポート)&lt;br /&gt;
&lt;br /&gt;
== その他 ==&lt;br /&gt;
&lt;br /&gt;
=== ACME クライアント ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Automated Certificate Management Environment|Automated Certificate Management Environment]] (ACME) プロトコルは [[Let&#039;s Encrypt]] などの [[Wikipedia:ja:認証局|認証局]] から X.509 証明書をリクエストできるプロトコルです。&lt;br /&gt;
&lt;br /&gt;
[https://letsencrypt.org/docs/client-options/ ACME クライアントの一覧] も参照してください。&lt;br /&gt;
&lt;br /&gt;
* {{App|acme-client|C で書かれたセキュアな Let&#039;s Encrypt クライアント。|https://kristaps.bsd.lv/acme-client/|{{AUR|acme-client}}}}&lt;br /&gt;
* {{App|acme-tiny|Let&#039;s Encrypt から TLS 証明書を作成・更新するための200行の Python スクリプト。|https://github.com/diafygi/acme-tiny|{{Pkg|acme-tiny}}}}&lt;br /&gt;
* {{App|acme.sh|Unix シェルスクリプトだけで作られた ACME クライアント。|https://github.com/Neilpang/acme.sh|{{AUR|acme.sh-git}}}}&lt;br /&gt;
* {{App|acmetool|Go で書かれた使いやすい ACME CLI。|https://github.com/hlandau/acme|{{AUR|acmetool}}, {{AUR|acmetool-git}}}}&lt;br /&gt;
* {{App|[[Certbot]]|Python で書かれた、Let&#039;s Encrypt によって推奨されている ACME クライアント。|https://github.com/certbot/certbot|{{Pkg|certbot}}}}&lt;br /&gt;
* {{App|dehydrated|Bash で書かれた ACME クライアント。|https://github.com/lukas2511/dehydrated|{{Pkg|dehydrated}}, {{AUR|dehydrated-git}}}}&lt;br /&gt;
* {{App|getssl|Bash で書かれた ACME クライアント。|https://github.com/srvrco/getssl|{{AUR|getssl}}, {{AUR|getssl-git}}}}&lt;br /&gt;
* {{App|lego|Go で書かれた Lets Encrypt クライアントと ACME ライブラリ。|https://github.com/xenolf/lego|{{AUR|lego-git}}}}&lt;br /&gt;
* {{App|letsencrypt-cli|もうひとつの Letsencrypt (ACME) クライアント。Ruby を使用。|https://github.com/zealot128/ruby-acme-cli|{{AUR|letsencrypt-cli}}}}&lt;br /&gt;
* {{App|manuale|完全手動の Let&#039;s Encrypt クライアント。Python で書かれています。|https://github.com/veeti/manuale|{{AUR|manuale}}}}&lt;br /&gt;
* {{App|ruby-acme-client|letsencrypt の ACME プロトコルの Ruby クライアント。|https://github.com/unixcharles/acme-client|{{AUR|ruby-acme-client}}}}&lt;br /&gt;
* {{App|simp_le|シンプルな Let&#039;s Encrypt クライアント。Python で書かれています。|https://github.com/zenhack/simp_le|{{AUR|simp_le-git}}}}&lt;br /&gt;
&lt;br /&gt;
=== OCSP ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Online Certificate Status Protocol|Online Certificate Status Protocol]] (OCSP) は [[Firefox]] によってサポートされています。[[Chromium]] は独自のメカニズムを備えています [http://dev.chromium.org/Home/chromium-security/crlsets]。&lt;br /&gt;
&lt;br /&gt;
GnuTLS の {{man|1|ocsptool}} や OpenSSL の {{man|1ssl|ocsp}} も参照。&lt;br /&gt;
&lt;br /&gt;
=== HSTS ===&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:HTTP Strict Transport Security|HTTP Strict Transport Security]] (HSTS) メカニズムは Firefox, Chromium, [[wget]] ({{ic|~/.wget-hsts}}) によってサポートされています。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/Certificates Gentoo:Certificates]&lt;br /&gt;
* [https://www.happyassassin.net/2015/01/12/a-note-about-ssltls-trusted-certificate-stores-and-platforms/ A note about SSL/TLS trusted certificate stores, and platforms (OpenSSL and GnuTLS)]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E4%B9%B1%E6%95%B0%E7%94%9F%E6%88%90&amp;diff=17793</id>
		<title>乱数生成</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E4%B9%B1%E6%95%B0%E7%94%9F%E6%88%90&amp;diff=17793"/>
		<updated>2020-09-15T14:13:25Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: Rng-tools is widely used now&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:暗号化]]&lt;br /&gt;
[[en:Random number generation]]&lt;br /&gt;
[[Wikipedia:Random number generation]] より:&lt;br /&gt;
:&#039;&#039;乱数生成器 (RNG) とはパターンの存在しない (つまりランダムな) 数字や記号の羅列を生成するための計算法または物理デバイスのこと。&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ランダムなデータの生成はアプリケーションによってはとても重要なことです。([[ディスク暗号化]]などに用いる) 暗号鍵の作成や[[ディスクの完全消去|ディスクの完全消去]]、暗号化された[[ソフトウェアアクセスポイント]]など。&lt;br /&gt;
&lt;br /&gt;
== カーネル内蔵の RNG ==&lt;br /&gt;
カーネルに含まれている RNG である [[wikipedia:ja:/dev/random|/dev/{u}random]] は暗号鍵の作成などに使われるような高いセキュリティレベルを必要とするランダムデータの生成を行うときに使うことを強く推奨されます。この乱数生成器はデバイスドライバなどの情報源から環境ノイズをエントロピープールに集めます。&lt;br /&gt;
&lt;br /&gt;
{{ic|man random}} コマンドではライブラリ関数の man ページ {{man|3|random}} が表示されてしまうので注意してください。{{ic|/dev/random}} デバイスに関する情報が必要なときは {{ic|man 4 random}} を実行して表示される {{man|4|random}} を読んで下さい。&lt;br /&gt;
&lt;br /&gt;
=== /dev/random ===&lt;br /&gt;
{{ic|/dev/random}} は4096ビット (512バイト) のエントロピープールを使用してランダムデータを生成します。エントロピープールが空になると、プールがまた補充されるまで待機します (これには時間がかかります)。{{ic|/dev/random}} は暗号鍵 (SSL, SSH, dm-crypt の LUKS など) の生成のために設計されており、HDD の中身の消去に使うのは現実的ではありません。システムに[[Wikipedia:Hardware_random_number_generator#Using_observed_events|十分なエントロピーが収集される]]まで止まってしまって、ディスクの消去にものすごく時間がかかるためです。エントロピーが枯渇しているような環境だと (例: リモートサーバー)、永遠に終わらないかもしれません。巨大なディレクトリで検索コマンドを実行するとか、X でマウスを動かすなどをすればエントロピープールは段々と溜まっていきますが、そもそもプールサイズ自体がディスクの消去を行うには不十分な造りになっています。&lt;br /&gt;
&lt;br /&gt;
{{ic|/proc/sys/kernel/random/entropy_avail}} と {{ic|/proc/sys/kernel/random/poolsize}} を比較することでシステムのエントロピープールを目で追うことができます。&lt;br /&gt;
&lt;br /&gt;
Linux カーネル 2.4 ではエントロピーのプールサイズを変更できるように書き換え可能な {{ic|/proc}} エントリが出来ましたが、新しいカーネルでは {{ic|read_wakeup_threshold}} と {{ic|write_wakeup_threshold}} しか書き換えできないようになっています。現在、プールサイズはカーネルの {{ic|/drivers/char/random.c}} の275行目でハードコード (決め打ち) されています:&lt;br /&gt;
&lt;br /&gt;
{{bc|/*&lt;br /&gt;
 * Configuration information&lt;br /&gt;
 */&lt;br /&gt;
#define &#039;&#039;&#039;INPUT_POOL_WORDS 128&#039;&#039;&#039;&lt;br /&gt;
#define &#039;&#039;&#039;OUTPUT_POOL_WORDS 32&#039;&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
カーネルのプールサイズは {{ic|INPUT_POOL_WORDS * OUTPUT_POOL_WORDS}} で求めることができ、既に述べたように、4096ビットとなります。&lt;br /&gt;
{{Warning|あなたの [http://everything2.com/title/Compromising+%252Fdev%252Frandom 制御下] にない環境では {{ic|/dev/random}} を使って&#039;&#039;重要な&#039;&#039;暗号鍵を生成してはいけません。例えば、共有サーバーの環境などを想定してください。別の環境で鍵を作成してから転送するようにしましょう。暗号学者 D. J. Bernstein はこの問題を [http://blog.cr.yp.to/20140205-entropy.html Mark Twain の名言] で説明しています。}}&lt;br /&gt;
&lt;br /&gt;
=== /dev/urandom ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/random}} と反対に、{{ic|/dev/urandom}} は初期のランダムなシードを使ってストリーム暗号の元とします [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e192be9d9a30555aae2ca1dc3aad37cba484cd4a] (カーネル 4.8 以上)。&lt;br /&gt;
&lt;br /&gt;
ストリーム暗号を使用することで、ディスクの徹底消去や[[ディスクの完全消去#ブロックデバイス暗号化の準備|ブロックデバイス暗号化の準備]]、LUKS キースロットの消去などの目的に叶うような高品質な疑似乱数データを大量に生成します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|長期間の暗号鍵を生成するのに {{ic|/dev/urandom}} は推奨されません。}}&lt;br /&gt;
&lt;br /&gt;
システムの状態や乱数の目的によって使用価値は大きく変わります。例えば、システムが立ち上がったばかりなのか、あるいはエントロピープールを十分に満たすだけの時間を経ているのかは大変重要です。&lt;br /&gt;
&lt;br /&gt;
以下の記事は様々な視点から {{ic|/dev/urandom}} の有用性を説明しています:&lt;br /&gt;
&lt;br /&gt;
* [http://www.2uo.de/myths-about-urandom/ Myths about urandom] - 非常に勉強になりますが誤謬も含まれています。&lt;br /&gt;
* [http://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers/ Safely generate random numbers] - エントロピーの収集についてカーネルの仕組みを変更しようとしたときに考えるべきことを説明しています。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、{{ic|/dev/urandom}} には以下のことが当てはまります:&lt;br /&gt;
# 可能であればカーネルの {{ic|getrandom()}} システムコールを使ってください。{{ic|/dev/urandom}} が正しく初期化されていることを確認できます。{{man|2|getrandom}} を参照。&lt;br /&gt;
# {{ic|/dev/urandom}} デバイスを使用して長期目的でエントロピーを生成する場合、正しく初期化されることを必ず確認してください。&lt;br /&gt;
# 起動時に  {{ic|/dev/urandom}} のエントロピーを使用する重要なサービスがある場合は注意してください。最近のシステムでもカーネルのエントロピー初期化は数秒かかることがあり、(仮想化環境など) 場合によってはさらに時間がかかります。カーネルは警告はしますが、いつまでもというわけではありません [https://patchwork.kernel.org/patch/9173499/]。&lt;br /&gt;
&lt;br /&gt;
出力例:&lt;br /&gt;
 $ dmesg | grep -e random:&lt;br /&gt;
 ...&lt;br /&gt;
 [    0.844818] random: systemd-udevd: uninitialized urandom read (16 bytes read)&lt;br /&gt;
 [    7.022171] random: fast init done&lt;br /&gt;
 [   12.916705] random: crng init done&lt;br /&gt;
&lt;br /&gt;
上記の例では、プールを初期化する十分なエントロピーをカーネルが収集する前にデフォルトのブートターゲットに達してしまっています。systemd は起動の初期段階でエントロピーを必要とするため [https://github.com/systemd/systemd/issues/4167]、ブートプロセスでエントロピープールが枯渇してしまう可能性があります。&lt;br /&gt;
&lt;br /&gt;
起動段階で問題があると、{{ic|/dev/urandom}} プールから十分な品質のエントロピーを得られないまま他のサービス (ウェブサーバーの [[OpenSSL]] セッションなど) が起動します。そして、OpenSSL の通常の設定では同じシードを使い続け、新しいシードを要求するのはセッションを再起動したときだけです。&lt;br /&gt;
&lt;br /&gt;
== 高速な RNG ==&lt;br /&gt;
長い暗号鍵の生成などは行わないアプリケーションの場合、パフォーマンスとセキュリティの折り合いをつけて[[Wikipedia:ja:擬似乱数|擬似乱数生成器]]を使うこともあります。Arch Linux のリポジトリには以下のような擬似乱数生成器が存在します:&lt;br /&gt;
* [[rng-tools]]&lt;br /&gt;
* [[Haveged]]&lt;br /&gt;
* [[Frandom]]&lt;br /&gt;
&lt;br /&gt;
また、[[Wikipedia:Yarrow_algorithm|Yarrow]] (FreeBSD/OS-X) や [[Wikipedia:Fortuna_(PRNG)|Fortuna]] (Yarrow の後継) のような[[Wikipedia:ja:暗号論的擬似乱数生成器|暗号論的擬似乱数生成器]]もあります。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [https://www.ietf.org/rfc/rfc4086.txt  RFC4086 - Randomness Requirements for Security] (Section 7.1.2 for /dev/random)&lt;br /&gt;
* [http://lkml.indiana.edu/hypermail/linux/kernel/1302.1/00479.html Linux Kernel ML] - /dev/random のスループットを高めるパッチの議論 (2013年2月)&lt;br /&gt;
* [http://eprint.iacr.org/2013/338 A challenge on /dev/random robustness] (2013年6月)&lt;br /&gt;
* [http://eprint.iacr.org/2014/167 エントロピーが少ない状態での /dev/random, Yarrow, Fortuna の挙動の解析] (2014年3月)&lt;br /&gt;
* [http://www.random.org/randomness/ Randomness] - 様々な RNG について説明している科学記事&lt;br /&gt;
* [http://www.fourmilab.ch/random/ ENT] - ランダムシーケンスをテストするシンプルなプログラム (エントロピー, カイ二乗検定, モンテカルロ, 相関など)&lt;br /&gt;
* [http://www.codeproject.com/Articles/795845/Arduino-Hardware-Random-Sequence-Generator-with-Ja DIY HRNG] - 安価な DIY の Arduino HRNG の例&lt;br /&gt;
* [https://eprint.iacr.org/2016/367 An Analysis of OpenSSL&#039;s Random Number Generator] - Paper on RNG reseeding risks in OpenSSL functionality&lt;br /&gt;
* [http://www.chronox.de/lrng/doc/lrng.pdf Linux Random Number Generator – A New Approach] - デバイスのアップデートに関する論文 (2017年3月)&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=17052</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=17052"/>
		<updated>2020-07-25T11:35:45Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384&amp;quot;, &lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: true,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;P-256&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16538</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16538"/>
		<updated>2020-06-24T15:24:15Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* サーバー */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: true,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;P-256&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16529</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16529"/>
		<updated>2020-06-21T17:41:15Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* サーバー */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: true,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;X25519:P-256&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16527</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16527"/>
		<updated>2020-06-21T07:40:31Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* サーバー */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: true,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;X25519:P-256&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16524</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16524"/>
		<updated>2020-06-20T18:24:37Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* クライアント */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: false,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;X25519:P-256&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16523</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16523"/>
		<updated>2020-06-20T18:21:04Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* サーバー */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: false,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;X25519:P-256&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16522</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16522"/>
		<updated>2020-06-20T15:59:37Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* クライアント */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: false,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;X25519:P-256:P-384&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16521</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16521"/>
		<updated>2020-06-20T15:58:21Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* 設定 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA&amp;quot;,&lt;br /&gt;
    &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: false,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;X25519:P-256:P-384&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16520</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16520"/>
		<updated>2020-06-20T15:54:50Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* クライアント */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
    &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA&amp;quot;,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: false,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;X25519:P-256:P-384&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16519</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16519"/>
		<updated>2020-06-20T15:51:12Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* サーバー */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305:SHA256&amp;quot;,&lt;br /&gt;
    &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256: ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA&amp;quot;,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: false,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;X25519:P-256:P-384&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16518</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16518"/>
		<updated>2020-06-20T15:48:37Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* クライアント */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305:SHA256&amp;quot;,&lt;br /&gt;
    &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256: ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA&amp;quot;,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: false,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;session_timeout&amp;quot;: 300,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16450</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16450"/>
		<updated>2020-06-02T18:41:35Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* サーバー */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;append_payload&amp;quot;: true,&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305:SHA256&amp;quot;,&lt;br /&gt;
    &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256: ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA&amp;quot;,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: false,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;session_timeout&amp;quot;: 300,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16446</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16446"/>
		<updated>2020-06-02T01:42:08Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* サーバー */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;append_payload&amp;quot;: true,&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305:SHA256&amp;quot;,&lt;br /&gt;
    &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256: ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA&amp;quot;,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: false,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;session_timeout&amp;quot;: 300,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16445</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16445"/>
		<updated>2020-06-02T01:40:16Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* クライアント */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;append_payload&amp;quot;: true,&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305:SHA256&amp;quot;,&lt;br /&gt;
    &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256: ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA&amp;quot;,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: false,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;session_timeout&amp;quot;: 300,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16444</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16444"/>
		<updated>2020-06-02T01:34:03Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* サーバー */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;append_payload&amp;quot;: true,&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher_tls13&amp;quot;: &amp;quot;TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: false,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;session_timeout&amp;quot;: 300,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16443</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16443"/>
		<updated>2020-06-02T01:23:16Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* サーバー */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;append_payload&amp;quot;: true,&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: false,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;session_timeout&amp;quot;: 300,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16423</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16423"/>
		<updated>2020-05-28T03:33:50Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* サーバー */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;append_payload&amp;quot;: true,&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: true,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;session_timeout&amp;quot;: 300,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16411</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16411"/>
		<updated>2020-05-26T04:53:25Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* サーバー */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;append_payload&amp;quot;: true,&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: true,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;session_timeout&amp;quot;: 300,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16410</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16410"/>
		<updated>2020-05-26T04:49:45Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* サーバー */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;append_payload&amp;quot;: true,&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:AES256-SHA384&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: true,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;session_timeout&amp;quot;: 300,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16409</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16409"/>
		<updated>2020-05-26T00:56:49Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: /* サーバー */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;append_payload&amp;quot;: true,&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: true,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;session_timeout&amp;quot;: 300,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16402</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16402"/>
		<updated>2020-05-25T02:57:04Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;append_payload&amp;quot;: true,&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: true,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;session_timeout&amp;quot;: 300,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Shadowsocks&amp;diff=16320</id>
		<title>Shadowsocks</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Shadowsocks&amp;diff=16320"/>
		<updated>2020-05-14T23:57:36Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Shadowsocks]]&lt;br /&gt;
[[zh-hans:Shadowsocks]]&lt;br /&gt;
[http://shadowsocks.org Shadowsocks] は軽量な socks5 プロキシです。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|shadowsocks-libev}}(C)/{{Pkg|shadowsocks}}(Python) パッケージを[[インストール]]してください。{{Pkg|shadowsocks-libev}}がおすすめ。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Shadowsocks の設定は JSON フォーマットのファイルを使って行うことができます。パッケージには以下のサンプル設定が含まれています:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/shadowsocks/example.json|{&lt;br /&gt;
    &amp;quot;server&amp;quot;:&amp;quot;my_server_ip&amp;quot;,&lt;br /&gt;
    &amp;quot;server_port&amp;quot;:8388,&lt;br /&gt;
    &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;:1080,&lt;br /&gt;
    &amp;quot;password&amp;quot;:&amp;quot;mypassword&amp;quot;,&lt;br /&gt;
    &amp;quot;timeout&amp;quot;:300,&lt;br /&gt;
    &amp;quot;method&amp;quot;:&amp;quot;chacha20-ietf-poly1305&amp;quot;,&lt;br /&gt;
    &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
    &amp;quot;workers&amp;quot;: 1&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|複数のサーバー IP を指定するときは、{{ic|&amp;quot;server&amp;quot;:[&amp;quot;1.1.1.1&amp;quot;,&amp;quot;2.2.2.2&amp;quot;],}} と指定してください。}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 名前 !! 説明&lt;br /&gt;
|-&lt;br /&gt;
| server || サーバーが listen するアドレス&lt;br /&gt;
|-&lt;br /&gt;
| server_port || サーバーのポート&lt;br /&gt;
|-&lt;br /&gt;
| local_address || ローカルマシンが listen するアドレス&lt;br /&gt;
|-&lt;br /&gt;
| local_port || ローカルマシンのポート&lt;br /&gt;
|-&lt;br /&gt;
| password || 暗号化に使用するパスワード&lt;br /&gt;
|-&lt;br /&gt;
| timeout || 秒数&lt;br /&gt;
|-&lt;br /&gt;
| method || デフォルト: &amp;quot;chacha20-ietf-poly1305&amp;quot;。[https://shadowsocks.org/en/spec/Stream-Ciphers.html Stream Ciphers]/[https://shadowsocks.org/en/spec/AEAD-Ciphers.html AEAD Ciphers] を参照。&lt;br /&gt;
|-&lt;br /&gt;
| fast_open || [https://github.com/clowwindy/shadowsocks/wiki/TCP-Fast-Open TCP-Fast-Open] を使用するかどうか (true / false)&lt;br /&gt;
|-&lt;br /&gt;
| workers || ワーカーの数&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ログ出力レベルを調整したい場合、{{ic|&amp;quot;verbose&amp;quot;: &#039;&#039;value&#039;&#039;}} オプションを追加します。以下の値のどれかを使ってください:&lt;br /&gt;
* 2: 全てをログ出力&lt;br /&gt;
* 1: デバッグ&lt;br /&gt;
* 0: デフォルト&lt;br /&gt;
* -1: 警告&lt;br /&gt;
* -2: エラー&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
==== コマンドラインから使う ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ss-local}} コマンドを使うことでクライアントを起動できます。設定ファイル {{ic|/etc/shadowsocks/config.json}} を使って起動するには:&lt;br /&gt;
 $ ss-local -c /etc/shadowsocks/config.json&lt;br /&gt;
&lt;br /&gt;
または、コマンドで設定を直接指定することも可能です:&lt;br /&gt;
 $ ss-local -s &#039;&#039;server_address&#039;&#039; -p &#039;&#039;server_port&#039;&#039; -l &#039;&#039;local_port&#039;&#039; -k &#039;&#039;password&#039;&#039; -m &#039;&#039;encryption_method&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== systemd を使う ====&lt;br /&gt;
&lt;br /&gt;
Shadowsocks クライアントは {{ic|shadowsocks-libev@.service}} のインスタンスを使って制御することができます。&lt;br /&gt;
&lt;br /&gt;
例えば、設定ファイル {{ic|/etc/shadowsocks/config.json}} を使ってサービスを[[起動]]・[[有効化]]する場合、{{ic|shadowsocks-libev@config.service}} サービスを使ってください。&lt;br /&gt;
&lt;br /&gt;
==== GUI クライアント ====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|shadowsocks-qt5}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
==== コマンドラインから使う ====&lt;br /&gt;
&lt;br /&gt;
サーバーは {{ic|ss-server}} コマンドで起動します。&lt;br /&gt;
&lt;br /&gt;
設定ファイル {{ic|/etc/shadowsocks/config.json}} を使ってフォアグラウンドでサーバーを起動するには:&lt;br /&gt;
 $ ss-server -c /etc/shadowsocks/config.json&lt;br /&gt;
&lt;br /&gt;
バックグラウンドで実行するには:&lt;br /&gt;
{{bc|&lt;br /&gt;
$ ss-server -c /etc/shadowsocks/config.json -d start&lt;br /&gt;
$ ss-server -c /etc/shadowsocks/config.json -d stop}}&lt;br /&gt;
&lt;br /&gt;
==== systemd を使う ====&lt;br /&gt;
&lt;br /&gt;
Shadowsocks サーバーは {{ic|shadowsocks-libev-server@.service}} のインスタンスを使って制御することができます。&lt;br /&gt;
&lt;br /&gt;
例えば、設定ファイル {{ic|/etc/shadowsocks/config.json}} を使ってサービスを[[起動]]・[[有効化]]する場合、{{ic|shadowsocks-libev-server@config.service}} サービスを使ってください。&lt;br /&gt;
&lt;br /&gt;
Shadowsocks で特権ポート (1024 以下) を使うには、root でサーバーを起動する必要があります:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/shadowsocks-libev-server@.service.d/start-as-root.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
User=root&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== 暗号化 ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|python2-m2crypto}} パッケージをインストールすると暗号化が少しだけ高速になります。&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Salsa20 Salsa20] や &#039;&#039;ChaCha20&#039;&#039; 暗号を使いたい場合は {{Pkg|libsodium}} パッケージをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://shadowsocks.org Shadowsocks ウェブサイト]&lt;br /&gt;
* [https://pypi.python.org/pypi/shadowsocks Python パッケージ]&lt;br /&gt;
* [https://github.com/shadowsocks/shadowsocks/wiki GitHub wiki]&lt;br /&gt;
* [https://github.com/shadowsocks-backup/shadowsocks Backup GitHub project] (the original project has been &amp;quot;removed according to regulations&amp;quot; in August 2015)&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16269</id>
		<title>Trojan</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Trojan&amp;diff=16269"/>
		<updated>2020-05-08T10:08:21Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Trojan]]&lt;br /&gt;
[https://trojan-gfw.github.io/trojan/ Trojan] は金盾の突破を補助する特定不可能なシステムです。プロキシクライアントと[[プロキシ設定|プロキシサーバー]]から構成されます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Trojan は {{Pkg|trojan}} パッケージで[[インストール]]することができます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Trojan は適切に設定を行わないと動作しません。設定フォーマットとしては [[Wikipedia:ja:JSON|JSON]] が使われます。設定は全て {{ic|/etc/trojan/}} で行います。設定ファイルの各フィールドの詳しい説明は [https://trojan-gfw.github.io/trojan/config こちら] を参照。また、便利な設定ジェネレータが [https://trojan-gfw.github.io/trojan-config-gen/ こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
クライアントの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;client&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 1080,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&amp;quot;password1&amp;quot;],&lt;br /&gt;
    &amp;quot;append_payload&amp;quot;: true,&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;verify&amp;quot;: true,&lt;br /&gt;
        &amp;quot;verify_hostname&amp;quot;: true,&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sni&amp;quot;: &amp;quot;example.com&amp;quot;,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;h2&amp;quot;,&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
サーバーの設定例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/trojan/config.json|{&lt;br /&gt;
    &amp;quot;run_type&amp;quot;: &amp;quot;server&amp;quot;,&lt;br /&gt;
    &amp;quot;local_addr&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;: 443,&lt;br /&gt;
    &amp;quot;remote_addr&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_port&amp;quot;: 80,&lt;br /&gt;
    &amp;quot;password&amp;quot;: [&lt;br /&gt;
        &amp;quot;password1&amp;quot;,&lt;br /&gt;
        &amp;quot;password2&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;log_level&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;ssl&amp;quot;: {&lt;br /&gt;
        &amp;quot;cert&amp;quot;: &amp;quot;/path/to/certificate.crt&amp;quot;,&lt;br /&gt;
        &amp;quot;key&amp;quot;: &amp;quot;/path/to/private.key&amp;quot;,&lt;br /&gt;
        &amp;quot;key_password&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;cipher&amp;quot;: &amp;quot;ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384&amp;quot;,&lt;br /&gt;
        &amp;quot;prefer_server_cipher&amp;quot;: true,&lt;br /&gt;
        &amp;quot;alpn&amp;quot;: [&lt;br /&gt;
            &amp;quot;http/1.1&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;reuse_session&amp;quot;: true,&lt;br /&gt;
        &amp;quot;session_timeout&amp;quot;: 300,&lt;br /&gt;
        &amp;quot;curves&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;sigalgs&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dhparam&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;tcp&amp;quot;: {&lt;br /&gt;
        &amp;quot;keep_alive&amp;quot;: true,&lt;br /&gt;
        &amp;quot;no_delay&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open&amp;quot;: true,&lt;br /&gt;
        &amp;quot;fast_open_qlen&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== TLS 証明書 ====&lt;br /&gt;
&lt;br /&gt;
Trojan を使うには [[Wikipedia:Transport_Layer_Security|TLS]] 証明書と秘密鍵が必要です。[[Let&#039;s Encrypt]] のフリー証明書を使うか [https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html こちら] に書かれているように自己署名証明書を使うことができます (非推奨)。用意できたら {{ic|cert}}, {{ic|key}}, {{ic|key_password}} フィールドを適用に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== TCP Fast Open ====&lt;br /&gt;
&lt;br /&gt;
サーバー側で [[Wikipedia:TCP_Fast_Open|TCP Fast Open]] を使うには、以下のようにオンにする必要があります:&lt;br /&gt;
 # echo 3 &amp;gt; /proc/sys/net/ipv4/tcp_fastopen&lt;br /&gt;
&lt;br /&gt;
==== 偽装 ====&lt;br /&gt;
&lt;br /&gt;
Trojan サーバーは TLS 上で他のサービスに偽装することができ、アクティブ測定を回避できます。例えば、[[nginx]] で[[ウェブサーバー]]を立ち上げて {{ic|remote_addr}} と {{ic|remote_port}} フィールドをサーバーのアドレスとポートに設定してください。&lt;br /&gt;
&lt;br /&gt;
== 実行 ==&lt;br /&gt;
&lt;br /&gt;
=== Systemd サービス ===&lt;br /&gt;
&lt;br /&gt;
Trojan は {{ic|trojan.service}} と {{ic|trojan@.service}} で制御できます。例えば、設定ファイル {{ic|/etc/trojan/xxx.json}} を使って Trojan を[[起動]]・[[有効化]]したい場合:&lt;br /&gt;
 # systemctl start trojan@xxx&lt;br /&gt;
 # systemctl enable trojan@xxx&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} を使用する場合:&lt;br /&gt;
 # systemctl start trojan&lt;br /&gt;
 # systemctl enable trojan&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
Trojan は以下のコマンドを使ってシェルで起動することもできます:&lt;br /&gt;
 $ trojan /etc/trojan/config.json&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/trojan/config.json}} は他の設定ファイルに置き換えることができます。Trojan はログを[[Wikipedia:ja:標準ストリーム#標準エラー出力 (stderr)|標準エラー]]に出力するため、ログを記録したい場合はリダイレクトしてください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trojan-gfw/trojan GitHub プロジェクト]&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Shadowsocks&amp;diff=16268</id>
		<title>Shadowsocks</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Shadowsocks&amp;diff=16268"/>
		<updated>2020-05-08T10:00:39Z</updated>

		<summary type="html">&lt;p&gt;Yukiko05: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プロキシサーバー]]&lt;br /&gt;
[[en:Shadowsocks]]&lt;br /&gt;
[[zh-hans:Shadowsocks]]&lt;br /&gt;
[http://shadowsocks.org Shadowsocks] は軽量な socks5 プロキシです。Python で書かれています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|shadowsocks}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Shadowsocks の設定は JSON フォーマットのファイルを使って行うことができます。パッケージには以下のサンプル設定が含まれています:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/shadowsocks/example.json|{&lt;br /&gt;
    &amp;quot;server&amp;quot;:&amp;quot;my_server_ip&amp;quot;,&lt;br /&gt;
    &amp;quot;server_port&amp;quot;:8388,&lt;br /&gt;
    &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;local_port&amp;quot;:1080,&lt;br /&gt;
    &amp;quot;password&amp;quot;:&amp;quot;mypassword&amp;quot;,&lt;br /&gt;
    &amp;quot;timeout&amp;quot;:300,&lt;br /&gt;
    &amp;quot;method&amp;quot;:&amp;quot;aes-256-cfb&amp;quot;,&lt;br /&gt;
    &amp;quot;fast_open&amp;quot;: false,&lt;br /&gt;
    &amp;quot;workers&amp;quot;: 1&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|複数のサーバー IP を指定するときは、{{ic|&amp;quot;server&amp;quot;:[&amp;quot;1.1.1.1&amp;quot;,&amp;quot;2.2.2.2&amp;quot;],}} と指定してください。}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 名前 !! 説明&lt;br /&gt;
|-&lt;br /&gt;
| server || サーバーが listen するアドレス&lt;br /&gt;
|-&lt;br /&gt;
| server_port || サーバーのポート&lt;br /&gt;
|-&lt;br /&gt;
| local_address || ローカルマシンが listen するアドレス&lt;br /&gt;
|-&lt;br /&gt;
| local_port || ローカルマシンのポート&lt;br /&gt;
|-&lt;br /&gt;
| password || 暗号化に使用するパスワード&lt;br /&gt;
|-&lt;br /&gt;
| timeout || 秒数&lt;br /&gt;
|-&lt;br /&gt;
| method || デフォルト: &amp;quot;aes-256-cfb&amp;quot;。[https://shadowsocks.org/en/spec/Stream-Ciphers.html Stream Ciphers]/[https://shadowsocks.org/en/spec/AEAD-Ciphers.html AEAD Ciphers] を参照。&lt;br /&gt;
|-&lt;br /&gt;
| fast_open || [https://github.com/clowwindy/shadowsocks/wiki/TCP-Fast-Open TCP-Fast-Open] を使用するかどうか (true / false)&lt;br /&gt;
|-&lt;br /&gt;
| workers || ワーカーの数&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ログ出力レベルを調整したい場合、{{ic|&amp;quot;verbose&amp;quot;: &#039;&#039;value&#039;&#039;}} オプションを追加します。以下の値のどれかを使ってください:&lt;br /&gt;
* 2: 全てをログ出力&lt;br /&gt;
* 1: デバッグ&lt;br /&gt;
* 0: デフォルト&lt;br /&gt;
* -1: 警告&lt;br /&gt;
* -2: エラー&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
&lt;br /&gt;
==== コマンドラインから使う ====&lt;br /&gt;
&lt;br /&gt;
{{ic|sslocal}} コマンドを使うことでクライアントを起動できます。設定ファイル {{ic|/etc/shadowsocks/config.json}} を使って起動するには:&lt;br /&gt;
 $ sslocal -c /etc/shadowsocks/config.json&lt;br /&gt;
&lt;br /&gt;
または、コマンドで設定を直接指定することも可能です:&lt;br /&gt;
 $ sslocal -s &#039;&#039;server_address&#039;&#039; -p &#039;&#039;server_port&#039;&#039; -l &#039;&#039;local_port&#039;&#039; -k &#039;&#039;password&#039;&#039; -m &#039;&#039;encryption_method&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== systemd を使う ====&lt;br /&gt;
&lt;br /&gt;
Shadowsocks クライアントは {{ic|shadowsocks@.service}} のインスタンスを使って制御することができます。&lt;br /&gt;
&lt;br /&gt;
例えば、設定ファイル {{ic|/etc/shadowsocks/config.json}} を使ってサービスを[[起動]]・[[有効化]]する場合、{{ic|shadowsocks@config.service}} サービスを使ってください。&lt;br /&gt;
&lt;br /&gt;
==== GUI クライアント ====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|shadowsocks-qt5}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
==== コマンドラインから使う ====&lt;br /&gt;
&lt;br /&gt;
サーバーは {{ic|ssserver}} コマンドで起動します。&lt;br /&gt;
&lt;br /&gt;
設定ファイル {{ic|/etc/shadowsocks/config.json}} を使ってフォアグラウンドでサーバーを起動するには:&lt;br /&gt;
 $ ssserver -c /etc/shadowsocks/config.json&lt;br /&gt;
&lt;br /&gt;
バックグラウンドで実行するには:&lt;br /&gt;
{{bc|&lt;br /&gt;
$ ssserver -c /etc/shadowsocks/config.json -d start&lt;br /&gt;
$ ssserver -c /etc/shadowsocks/config.json -d stop}}&lt;br /&gt;
&lt;br /&gt;
==== systemd を使う ====&lt;br /&gt;
&lt;br /&gt;
Shadowsocks サーバーは {{ic|shadowsocks-server@.service}} のインスタンスを使って制御することができます。&lt;br /&gt;
&lt;br /&gt;
例えば、設定ファイル {{ic|/etc/shadowsocks/config.json}} を使ってサービスを[[起動]]・[[有効化]]する場合、{{ic|shadowsocks-server@config.service}} サービスを使ってください。&lt;br /&gt;
&lt;br /&gt;
Shadowsocks で特権ポート (1024 以下) を使うには、root でサーバーを起動する必要があります:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/shadowsocks-server@.service.d/start-as-root.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
User=root&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== 暗号化 ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|python2-m2crypto}} パッケージをインストールすると暗号化が少しだけ高速になります。&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Salsa20 Salsa20] や &#039;&#039;ChaCha20&#039;&#039; 暗号を使いたい場合は {{Pkg|libsodium}} パッケージをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://shadowsocks.org Shadowsocks ウェブサイト]&lt;br /&gt;
* [https://pypi.python.org/pypi/shadowsocks Python パッケージ]&lt;br /&gt;
* [https://github.com/shadowsocks/shadowsocks/wiki GitHub wiki]&lt;br /&gt;
* [https://github.com/shadowsocks-backup/shadowsocks Backup GitHub project] (the original project has been &amp;quot;removed according to regulations&amp;quot; in August 2015)&lt;/div&gt;</summary>
		<author><name>Yukiko05</name></author>
	</entry>
</feed>