2016 年から愛用していた iMac が性能的に限界を迎えたのを機に、このたび自作 PC デビューを果たしました。使っていた iMac は Fusion Drive 採用の HDD 搭載機で、5 年という期間は頑張ってくれた方です。

今回は予算 20 万円で、最低 5 年は戦ってくれることを期待したいマシンを以下の構成で組みました。
構成は @gaogao_9 にお願いしたら良い感じに考えてくれました。
OS は Windows 10 Home パッケージ版の流用なので予算として考慮していません。

規格・型番等

購入価格

CPU

AMD Ryzen 9 3900X1

¥48,000

M/B

MSI B550 M/B

MPG B550I GAMING EDGE WIFI2

¥18,678

GPU

NVIDIA GeForce RTX 3070

玄人志向 GG-RTX3070-E8GB/TP3

¥65,544

電源

SUPER FLOWER LEADEX III GOLD 850W4

¥14,828

RAM

DDR-3200 16GB×2

ADATA AD4U3200716G22-D5

¥12,827

SSD

NVMe PCIe Gen 4 SSD 500 GB

CFD 販売 CSSD-M2B5GPG3VND6

¥10,480

クーラー

SCYTHE 虎徹 MarkⅡ7

¥3,828

ケース

Mini-ITX

SilverStone SUGO 158

¥23,999

合計

¥198,184

価格は 2020/12/28 時点のもの。年末に価格.com とにらめっこしながらポチポチしていました。

概要

SOCKS プロキシーは OpenSSH などで手軽に建てられるプロキシーの一つですが、redsocks を使用することで TCP のパケットが透過的に SOCKS プロキシーを経由するように設定することができます。今回は EdgeRouter X に redsocks をインストールし、LAN 内のコンピューターから特定の宛先への TCP 通信と名前解決が透過的に SOCKS プロキシーを経由するように設定してみます。

redsocks とは

redsocks は TCP パケットを受け取り、SOCKS/HTTPS プロキシーを通過させて返すソフトウェアです。iptables の REDIRECTDNAT と組み合わせて、redsocks の動作しているポートにプロキシーを通過させたいパケットを転送して使用します。このとき、iptables が REDIRECT や DNAT で付け替える前の本来の宛先アドレスや宛先ポートは、getsockopt() でソケットを取得する際の SO_ORIGINAL_DST というオプションによって取得されるため1、iptables のルールを設定するホストと redsocks が動作するホストは同一のマシンである必要があります。

TCP の場合

iptables の DNAT ルールによって redsocks に向けられたパケットが SOCKS プロキシーに転送されます。

EdgeRouter X と Linux サーバーを IPsec over IPv6 の拠点間 VPN で接続する方法です。

So-net 光 プラスは、フレッツ光とプロバイダー契約がセットになっているいわゆる光コラボサービスで、IPv4 が PPPoE で提供されているという特徴があります。そのため、グローバル IP アドレスが頻繁に変更されたり、NGN 網終端装置の輻輳の影響を受けたり1といった問題があり、IPv6 接続のほうがより安定して VPN 接続を構成することができます。このサービスの IPv6 アドレスはあくまでも半固定ですが2 IPv6 アドレスの変更頻度は低く、DDNS などを設定しておけば十分に実用できます。

2019/5/20 にリリースされた strongSwan 5.8.01ですが、systemd のユニットが以下のように更新されました。

Renaming of systemd Service Units

The systemd service units have been renamed. The modern unit (charon-systemd with vici/swanctl), which was called strongswan-swanctl, is now called strongswan (the previous name is configured as alias in the unit, for which a symlink is created when the unit is enabled). The legacy unit (starter/charon with ipsec/stroke) is now called strongswan-starter.

このリリースによって、今まで strongswan ユニットを使っていたシステムではその実体が charon-systemd + vici/swanctl を使ったものに変更されます。

バージョン

ユニット

実体

< v5.8.0

strongswan

starter/charon + ipsec/stroke

strongswan-swanctl

charon-systemd + vici/swanctl

>= v5.8.0

strongswan

charon-systemd + vici/swanctl

strongswan-starter

starter/charon + ipsec/stroke

ロードバランサーとは

EdgeOS は標準で WAN へのロードバランサー機能を搭載しており、パケットのルーティング先を予め指定した方法でインターフェイスごとに振り分けることができます1。たとえば複数の回線を契約しているような逸般の誤家庭で負荷をそれぞれに分散させたり、一方の回線が利用できなくなったときにもう一方の回線に自動で切り替えたり、といったユースケースがあります。

この記事では So-net 光 プラス を契約している我が家(VDSL 😢)で、フレッツ光の PPPoE 方式による接続と v6 プラス を EdgeRouter から利用しつつ、v6 プラスが利用できないときに PPPoE 接続にフォールバックさせるように設定してみます。

v6 プラスのデメリット

v6 プラスを利用している場合、特定のポート番号を使用するサービスが IPv4 で利用できなくなります。しかしながらこの記事の方法を使用すると、EdgeRouter からルーティングされるパケットをロードバランシングから除外することで PPPoE がそのまま利用できるため、L2TP や IPsec などを引き続き利用することができます。

So-net による v6 プラスの説明では以下のようにサービスの制約として説明されています2。これは v6 プラスが一つのアドレスを複数のユーザーで共有するサービスであるため、特定のポートを専有することができないことに起因する問題です。

「v6プラス」をご利用の場合、「固定IPサービス」は利用できません。

※PPPoEのIPv4を有効化いただくことでご利用可能です。 (詳しくはこちら)
また、以下に該当するサービスについても、ご利用いただけない場合があります。

  • 特定のプロトコル (PPTP、SCTP) を利用するサービス
  • 利用可能なポート番号が制限されているため、特定のポートを使うサービス
  • IPv4グローバルアドレスを共有するネットワークでは利用できないサービス