有料VPN(NordVPN)のホワイトリスト設定 その4(2023/01/08) [Linux]
なお、ホワイトリストの機能不具合(?)がなぜ一般に広く報告されないかと言うと、たいていホームユースでは1サブネットしかないでしょうし、当然ホワイトリストの対象も地足の直収セグメントになると思われます。
その場合、明示ルーティングを設定しなくても、ルーティングテーブルには地足という自動生成のルーティングエントリが載りますので、a1の要件が自動的に満たされるからではないかと思ってます。
192.168.10.0/24 dev eno1 proto kernel scope link src 192.168.10.100 metric 100
■ip rule
a1.明示的ルーティングが設定されているもの → 通常(main)ルーティングテーブル参照
a2.「0xe1f1」とタグが付いていない通信 → VPN用ルーティングテーブル参照
a3.通常(main)ルーティングテーブル参照
その場合、明示ルーティングを設定しなくても、ルーティングテーブルには地足という自動生成のルーティングエントリが載りますので、a1の要件が自動的に満たされるからではないかと思ってます。
192.168.10.0/24 dev eno1 proto kernel scope link src 192.168.10.100 metric 100
■ip rule
a1.明示的ルーティングが設定されているもの → 通常(main)ルーティングテーブル参照
a2.「0xe1f1」とタグが付いていない通信 → VPN用ルーティングテーブル参照
a3.通常(main)ルーティングテーブル参照
有料VPN(NordVPN)のホワイトリスト設定 その3(2023/01/08) [Linux]
そもそもNordVPNがどうやってVPN通信を実現しているのか謎です。まあ私、Linux全く詳しくなく素人ですし。そんな変な作り込みはやってないとは思うのですが、、、
ここにほぼ答えが書いてありましたね。
https://ro-che.info/articles/2021-02-27-linux-routing
すごく簡単に説明すると、iptables、ip rule(ポリシルーティング)、ip route(宛先ルーティング)の複合的要素で構成されていて、原理原則として、ip rule → iptables → ip routeの順に評価されます。各エントリの中身も若いものから順に評価されていきます。
■ip rule
a1.明示的ルーティングが設定されているもの → 通常(main)ルーティングテーブル参照
a2.「0xe1f1」とタグが付いていない通信 → VPN用ルーティングテーブル参照
a3.通常(main)ルーティングテーブル参照
■iptables
b1. NordVPNのホワイトリスト通信を:許可
b2.任意の通信を「0xe1f1」とタグ付け(CONNMARK)
b3.任意の通信を許可
■ip route(main)
c1.通常ルーティングテーブル
■ip route(VPN用)
c2.nordlynxトンネルへ投げる
以下は私の理解および個人的な解釈ですが、VPN対象通信はどのように評価(マッチ)されるかと言うと、
a { a2 } → b { b2, b3 } → c { c2 } →
→ VPNカプセル化され再評価 → a { a3 } → b { b2, b3 } → c { c1 }
という動きに見えます。
一方、NordVPNホワイトリストの非VPN通信はどのように評価(マッチ)されるかと言うと、
a { a2 } → b { b1 } → c { c2 } → ?
となり、非VPN通信にも関わらず、nordlynxトンネルへ投げられてしまいます。実際にtcpdumpでパケットキャプチャをすると、非VPN通信がトンネルインタフェース側で観測されました。
この理解だと、非VPN通信は「a2」の評価をされてしまってはダメなので、「a1」でip ruleの評価を終わらせてあげる必要があるようです。つまり、
NordVPN ホワイトリスト通信用の明示的ルーティングが必要と言うこと
です。
というわけで、明示的ルーティングを設定すると、ちゃんとホワイトリストが機能するようになりました。
ここにほぼ答えが書いてありましたね。
https://ro-che.info/articles/2021-02-27-linux-routing
すごく簡単に説明すると、iptables、ip rule(ポリシルーティング)、ip route(宛先ルーティング)の複合的要素で構成されていて、原理原則として、ip rule → iptables → ip routeの順に評価されます。各エントリの中身も若いものから順に評価されていきます。
■ip rule
a1.明示的ルーティングが設定されているもの → 通常(main)ルーティングテーブル参照
a2.「0xe1f1」とタグが付いていない通信 → VPN用ルーティングテーブル参照
a3.通常(main)ルーティングテーブル参照
■iptables
b1. NordVPNのホワイトリスト通信を:許可
b2.任意の通信を「0xe1f1」とタグ付け(CONNMARK)
b3.任意の通信を許可
■ip route(main)
c1.通常ルーティングテーブル
■ip route(VPN用)
c2.nordlynxトンネルへ投げる
以下は私の理解および個人的な解釈ですが、VPN対象通信はどのように評価(マッチ)されるかと言うと、
a { a2 } → b { b2, b3 } → c { c2 } →
→ VPNカプセル化され再評価 → a { a3 } → b { b2, b3 } → c { c1 }
という動きに見えます。
一方、NordVPNホワイトリストの非VPN通信はどのように評価(マッチ)されるかと言うと、
a { a2 } → b { b1 } → c { c2 } → ?
となり、非VPN通信にも関わらず、nordlynxトンネルへ投げられてしまいます。実際にtcpdumpでパケットキャプチャをすると、非VPN通信がトンネルインタフェース側で観測されました。
この理解だと、非VPN通信は「a2」の評価をされてしまってはダメなので、「a1」でip ruleの評価を終わらせてあげる必要があるようです。つまり、
NordVPN ホワイトリスト通信用の明示的ルーティングが必要と言うこと
です。
というわけで、明示的ルーティングを設定すると、ちゃんとホワイトリストが機能するようになりました。
有料VPN(NordVPN)のホワイトリスト設定 その2(2023/01/08) [Linux]
そもそもNordVPNがどうやってVPN通信とホワイトリストを実現しているか、ですね。
Windowsだとブラックボックスですが、Linuxってわりと原始的な機能を組み合わせて実現しているイメージなので、ちゃんと解析すれば原因が分かるのではないでしょうか。
今ある材料としては、
んー、ここからどうやってホワイトリストを分離して、VPN通信を実現しているのか謎です。
Windowsだとブラックボックスですが、Linuxってわりと原始的な機能を組み合わせて実現しているイメージなので、ちゃんと解析すれば原因が分かるのではないでしょうか。
今ある材料としては、
root@Zorin16:~$ uname -a Linux Zorin16 5.15.0-57-generic #63~20.04.1-Ubuntu SMP Wed Nov 30 13:40:16 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux root@Zorin16:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff altname enp3s0 inet 192.168.10.100/24 brd 192.168.10.255 scope global noprefixroute eno1 valid_lft forever preferred_lft forever 4: nordlynx: <POINTOPOINT,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 10.5.0.2/32 scope global nordlynx valid_lft forever preferred_lft forever root@Zorin16:~$ ip r default via 192.168.10.254 dev eno1 proto static metric 20100 169.254.0.0/16 dev eno1 scope link metric 1000 192.168.10.0/24 dev eno1 proto kernel scope link src 192.168.10.100 metric 100 root@Zorin16:~$ iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT udp -- anywhere anywhere multiport dports 4011 ACCEPT all -- 192.168.20.0/24 anywhere /* nordvpn */ ACCEPT all -- anywhere anywhere connmark match 0xe1f1 /* nordvpn */ DROP all -- anywhere anywhere /* nordvpn */ ACCEPT udp -- anywhere anywhere multiport dports mdns ACCEPT tcp -- anywhere anywhere multiport dports 4000 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere 192.168.20.0/24 /* nordvpn */ CONNMARK all -- anywhere anywhere mark match 0xe1f1 /* nordvpn */ CONNMARK save ACCEPT all -- anywhere anywhere connmark match 0xe1f1 /* nordvpn */ DROP all -- anywhere anywhere /* nordvpn */ root@Zorin16:~$ ip rule 0: from all lookup local 32764: from all lookup main suppress_prefixlength 0 32765: not from all fwmark 0xe1f1 lookup 205 32766: from all lookup main 32767: from all lookup defaultぐらいなんですよね。
んー、ここからどうやってホワイトリストを分離して、VPN通信を実現しているのか謎です。
有料VPN(NordVPN)のホワイトリスト設定 その1(2023/01/07) [Linux]
NordVPNのバージョンは3.15.3です。
家庭内ネットワークをちょっと改造した結果、サブネットが2つに分かれてルーティングが必要になってしまいました。まあそれはルータのルーティング設定で問題ない訳ですが、ちょっとLinuxクライアント機の動きがおかしいのです。
NordVPNを動かすLinux子機と家庭内NASサーバが異なるセグメントになってしまったのですが、NordVPNにはホワイトリストの設定があり、VPN通信対象外にできるポートやサブネットを指定することができます。
この設定で192.168.100.0/24などと対象外セグメントを指定できるのですが、Linux子機と家庭内NASが相互に接続できなくなってしまいました。
今までは接続可能でした。
正確にはNordVPNのバージョンアップをして接続できなくなってしまったのか、サブネットを分けたことで接続できなくなってしまったのか分かりません。ただ、Webで検索しても不具合の話は見つからないので、おそらくもともとそういう状態だったのでしょう。
一つ言えるのは、サブネット分割する前は双方同一セグメントでしたし、そのあたりも関係しているのでしょうね。
家庭内ネットワークをちょっと改造した結果、サブネットが2つに分かれてルーティングが必要になってしまいました。まあそれはルータのルーティング設定で問題ない訳ですが、ちょっとLinuxクライアント機の動きがおかしいのです。
NordVPNを動かすLinux子機と家庭内NASサーバが異なるセグメントになってしまったのですが、NordVPNにはホワイトリストの設定があり、VPN通信対象外にできるポートやサブネットを指定することができます。
この設定で192.168.100.0/24などと対象外セグメントを指定できるのですが、Linux子機と家庭内NASが相互に接続できなくなってしまいました。
今までは接続可能でした。
正確にはNordVPNのバージョンアップをして接続できなくなってしまったのか、サブネットを分けたことで接続できなくなってしまったのか分かりません。ただ、Webで検索しても不具合の話は見つからないので、おそらくもともとそういう状態だったのでしょう。
一つ言えるのは、サブネット分割する前は双方同一セグメントでしたし、そのあたりも関係しているのでしょうね。
NoMachine?半フリーズ(Zorin16、2022/03/10) [Linux]
詳細不明の情報です。
NoMachineで接続状態を放置していたら(休日、夜放置して朝起きるまでなので6~8時間ぐらい?)
GUIがおかしくなってしまいました。具体的には、
・クリックができない
・クリックで掴んだアイコンを手放せない(マウス押しっぱなし状態)
・ウィンドウの切り替えができない
・GUIとしての画面表示は正常でリアルタイム更新される(リソースメーターのグラフ・数字など)
・AnyDeskで同じデスクトップに繋ぐと症状が維持されている(Xorg側が腐っている?)
といった症状が発生しました。3回ほど再現しているので再現性はありますが、長時間放置する以外の発動条件が不明です。10分程度の短時間でGUI作業を終え、都度セッション切断する場合は発生しないような感じがします。
Zorin16は何度もOSアップデートしてますし、どこか腐ったのでしょうかね。
NoMachineで接続状態を放置していたら(休日、夜放置して朝起きるまでなので6~8時間ぐらい?)
GUIがおかしくなってしまいました。具体的には、
・クリックができない
・クリックで掴んだアイコンを手放せない(マウス押しっぱなし状態)
・ウィンドウの切り替えができない
・GUIとしての画面表示は正常でリアルタイム更新される(リソースメーターのグラフ・数字など)
・AnyDeskで同じデスクトップに繋ぐと症状が維持されている(Xorg側が腐っている?)
といった症状が発生しました。3回ほど再現しているので再現性はありますが、長時間放置する以外の発動条件が不明です。10分程度の短時間でGUI作業を終え、都度セッション切断する場合は発生しないような感じがします。
Zorin16は何度もOSアップデートしてますし、どこか腐ったのでしょうかね。
タグ:NoMachine
ダミーディスプレイ(Zorin16、2022/01/30) [Linux]
NoMachineによってリモートアクセスの環境は整備できた訳ですが、ここで大きな問題が発生します。それは物理ディスプレイ問題です。X Window System(Xorg)がプロセス起動時に物理ディスプレイの接続をスキャンしているようで、そこでディスプレイが見つからないとXorgがうまく起動しません。
Xorgが起動しない → NoMachineが起動しない → リモート接続できない
という感じです。仮想フレームバッファのような仮想ディスプレイを作ったとしても、私が目指す、サスペンド&再開のできる状態を作ることができませんので、議論が最初に戻ってしまいます。
一応、未使用の古い液晶ディスプレイがあるのでそれを繋いでおけば解決しますが、古いディスプレイのため解像度が1280x1024上限であり、もう2周りぐらい広い解像度が欲しい私にとってはそれも不満だったりします。
で、見つけたのがダミーディスプレイです。ディスプレイが接続されていなくても、そこに物理ディスプレイが接続されているかのようにふるまうアダプタです。エヴァンゲリオンに出てきたダミープラグのようなものですね。
VGA用、HDMI用など種類はあるようですが、私がAmazonで買ったのはHDMI用で最大4Kに対応するものです。ダミーだけあって、解像度はよりどりみどりのようです。しかもお値段約800円程度。
在宅勤務などで同様のニーズがあり、販売されているもののようです。怪しい中華製のようですが、以下のようにばっちり使えました。
Xorgが起動しない → NoMachineが起動しない → リモート接続できない
という感じです。仮想フレームバッファのような仮想ディスプレイを作ったとしても、私が目指す、サスペンド&再開のできる状態を作ることができませんので、議論が最初に戻ってしまいます。
一応、未使用の古い液晶ディスプレイがあるのでそれを繋いでおけば解決しますが、古いディスプレイのため解像度が1280x1024上限であり、もう2周りぐらい広い解像度が欲しい私にとってはそれも不満だったりします。
で、見つけたのがダミーディスプレイです。ディスプレイが接続されていなくても、そこに物理ディスプレイが接続されているかのようにふるまうアダプタです。エヴァンゲリオンに出てきたダミープラグのようなものですね。
VGA用、HDMI用など種類はあるようですが、私がAmazonで買ったのはHDMI用で最大4Kに対応するものです。ダミーだけあって、解像度はよりどりみどりのようです。しかもお値段約800円程度。
在宅勤務などで同様のニーズがあり、販売されているもののようです。怪しい中華製のようですが、以下のようにばっちり使えました。
NoMachineの導入(Zorin16、2022/01/04) [Linux]
AnyDeskは便利ですが、VPNと相性が悪いことが判明しました。AnyDeskはサービス提供にインターネット(クラウド)が関与しているので、難しいところではあります。
そうなると、LAN内でダイレクト接続できるbrynhildrのような接続形態のものが最適となります。NordVPNでホワイトリストの設定ができるので、自宅LANセグメントをホワイトリストに設定すればスプリットトンネリングによって、VPNを介さないダイレクト通信が実現できます。
で、Linuxのダイレクト接続のリモートアクセスってVNC系か、xrdpになってしまう訳ですが、結局そこで選択肢に困ってしまう訳です。AnyDeskのように純粋に画面転送だけを行い、既存のセッションを維持できるものが良いのですが…
とまあここで、NoMachineの名前が挙がるわけです。NoMachineは以前Windowsで導入したことがあるのですが、完成度は高いものの使い勝手の点でAnyDeskに軍配が上がってしまい、Windowsの操作であればAnyDeskでいいやとなってしまいました。
しかし今回はLinuxです。LinuxにおいてWidowsで試したときのような使い勝手を維持できるのであれば、まさに最強でしょう。というわけで早速インストールです。
普通にパッケージをダウンロードして、dpkg -i 等でインストールすればそれで完了です。
Windowsと同じような使い勝手で使えました!
NoMachine最強かもしれません。Linuxでこの使い勝手は素晴らしいです。もちろんセッションを切っても状態を維持できるます。(そのままの状態で再開できる)
NordVPNとのホワイトリストとの相性も問題ありませんでした。
そうなると、LAN内でダイレクト接続できるbrynhildrのような接続形態のものが最適となります。NordVPNでホワイトリストの設定ができるので、自宅LANセグメントをホワイトリストに設定すればスプリットトンネリングによって、VPNを介さないダイレクト通信が実現できます。
で、Linuxのダイレクト接続のリモートアクセスってVNC系か、xrdpになってしまう訳ですが、結局そこで選択肢に困ってしまう訳です。AnyDeskのように純粋に画面転送だけを行い、既存のセッションを維持できるものが良いのですが…
とまあここで、NoMachineの名前が挙がるわけです。NoMachineは以前Windowsで導入したことがあるのですが、完成度は高いものの使い勝手の点でAnyDeskに軍配が上がってしまい、Windowsの操作であればAnyDeskでいいやとなってしまいました。
しかし今回はLinuxです。LinuxにおいてWidowsで試したときのような使い勝手を維持できるのであれば、まさに最強でしょう。というわけで早速インストールです。
普通にパッケージをダウンロードして、dpkg -i 等でインストールすればそれで完了です。
Windowsと同じような使い勝手で使えました!
NoMachine最強かもしれません。Linuxでこの使い勝手は素晴らしいです。もちろんセッションを切っても状態を維持できるます。(そのままの状態で再開できる)
NordVPNとのホワイトリストとの相性も問題ありませんでした。
AnyDeskとVPNの相性(Zorin16、2021/12/20) [Linux]
AnyDeskは便利ですが、インターネット上の中継サーバを介して接続するという仕様上、VPN接続時に不具合が起こることが判明。具体的には、
・初期接続および使い始めは問題ない
・2~3分で「anynet_unknown」と表示され、強制切断
となります。
再接続すればまた繋がるのですが、集中して作業をしたいときには面倒です。2~3分の間はきちんと画面操作できているので、片方向セッションになっているとか、そういった訳ではなさそうです。
VPN通信の対象外にするwhitelistを設定してもダメ、プロトコルをTCP、UDPどちらにしてもダメ。AnyDeskのデバッグができれば良いのでしょうが、とりあえずお手上げです。
・初期接続および使い始めは問題ない
・2~3分で「anynet_unknown」と表示され、強制切断
となります。
再接続すればまた繋がるのですが、集中して作業をしたいときには面倒です。2~3分の間はきちんと画面操作できているので、片方向セッションになっているとか、そういった訳ではなさそうです。
VPN通信の対象外にするwhitelistを設定してもダメ、プロトコルをTCP、UDPどちらにしてもダメ。AnyDeskのデバッグができれば良いのでしょうが、とりあえずお手上げです。
AnyDeskの自動起動(Zorin16、2021/12/15) [Linux]
環境はZorin16を使っており、アカウントは自動ログインになっています。
前回、AnyDeskがなかなか使えるということでしたが、sshdのようにサービスとしては常駐してくれないようです。そのため、AnyDeskでリモートアクセスするには、手動でアプリ起動させる必要があります。
昔だったら.xinitrcや.xsessionに記述すれば良いのでしょうが、正直なところ最近のXデスクトップ界隈は全くの無知であり、何が正解なのかさっぱり分かりません。CLI一筋で生きてきた弊害でしょうか。
いろいろ探していると、スタートメニューの中にシステムツール>自動起動するアプリケーションという設定項目があるではありませんか。ここにAnyDeskを登録してあげれば良さそうです。
が、AnyDeskのアプリが見つからないのです。which any~やwhich Any~とやってもAnyDeskの実行バイナリが見つからず、登録しようにも登録できません。確かにプロセス一覧にはanydeskが存在していますが、/app/extra/anydeskと表示されており、ディレクトリ階層を探してもそのようなディレクトリがありません。
一応、スタートメニュー(ランチャー)にはAnyDeskが登録されているので、ランチャーの元になっている設定を探してみました。システムツール>メイン・メニューがそれに該当するようです。
この中でAnyDeskのプロパティを見てみると、「/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=anydesk com.anydesk.Anydesk」となっており、どうやらこれを先ほどの自動起動のところに登録すると良いようです。
前回、AnyDeskがなかなか使えるということでしたが、sshdのようにサービスとしては常駐してくれないようです。そのため、AnyDeskでリモートアクセスするには、手動でアプリ起動させる必要があります。
昔だったら.xinitrcや.xsessionに記述すれば良いのでしょうが、正直なところ最近のXデスクトップ界隈は全くの無知であり、何が正解なのかさっぱり分かりません。CLI一筋で生きてきた弊害でしょうか。
いろいろ探していると、スタートメニューの中にシステムツール>自動起動するアプリケーションという設定項目があるではありませんか。ここにAnyDeskを登録してあげれば良さそうです。
が、AnyDeskのアプリが見つからないのです。which any~やwhich Any~とやってもAnyDeskの実行バイナリが見つからず、登録しようにも登録できません。確かにプロセス一覧にはanydeskが存在していますが、/app/extra/anydeskと表示されており、ディレクトリ階層を探してもそのようなディレクトリがありません。
一応、スタートメニュー(ランチャー)にはAnyDeskが登録されているので、ランチャーの元になっている設定を探してみました。システムツール>メイン・メニューがそれに該当するようです。
この中でAnyDeskのプロパティを見てみると、「/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=anydesk com.anydesk.Anydesk」となっており、どうやらこれを先ほどの自動起動のところに登録すると良いようです。
LinuxのGUIリモートアクセス(2021/12/10) [Linux]
LinuxのGUIは、Windowsのようにリモートアクセスできるとうれしいですよね。ただ、そのためのツールがあまり揃っていないのが実情のようです
探してみるとxrdpが見つかりますが、これはリモートアクセスの機能というより、Windowsリモートデスクトップのような機能であり、画面共有の機能ではありません。(セッション接続時に、新規接続になってしまう)
古来よりあるVNCも似たような構成方法であり、求めているものではありません。
ちなみにxrdpで接続すると、Zorion16だとタブレットモードのような特殊なデスクトップとなってしまい、これも求めているものではありませんでした。
要件としては、
・WindowsにおけるTeamViewer、AnyDesk、brynhildrのようなもの
具体的には、
・ヘルプデスクで使用されるような既存画面の共有であって、新規セッションではない
・サービスとして常駐できるもの
・なるべく最近の技術であり、発色・レスポンスが良いもの
でしょうか。
で、まあ実はソフトウェア一覧でAnyDeskを検索すると一発で出てくるので、AnyDeskをインストールしてあっさり問題解決です。
AnyDeskは非常によくできていて、見た目や設定方法などほぼWindows版そのまんまです。既存のセッションに相乗りして、現在表示中の画面を横取りできます。まさに求めているものです。
と言うわけで、商用は別として個人ユースであればGUIリモートアクセスはAnyDesk一択かもしれません。
探してみるとxrdpが見つかりますが、これはリモートアクセスの機能というより、Windowsリモートデスクトップのような機能であり、画面共有の機能ではありません。(セッション接続時に、新規接続になってしまう)
古来よりあるVNCも似たような構成方法であり、求めているものではありません。
ちなみにxrdpで接続すると、Zorion16だとタブレットモードのような特殊なデスクトップとなってしまい、これも求めているものではありませんでした。
要件としては、
・WindowsにおけるTeamViewer、AnyDesk、brynhildrのようなもの
具体的には、
・ヘルプデスクで使用されるような既存画面の共有であって、新規セッションではない
・サービスとして常駐できるもの
・なるべく最近の技術であり、発色・レスポンスが良いもの
でしょうか。
で、まあ実はソフトウェア一覧でAnyDeskを検索すると一発で出てくるので、AnyDeskをインストールしてあっさり問題解決です。
AnyDeskは非常によくできていて、見た目や設定方法などほぼWindows版そのまんまです。既存のセッションに相乗りして、現在表示中の画面を横取りできます。まさに求めているものです。
と言うわけで、商用は別として個人ユースであればGUIリモートアクセスはAnyDesk一択かもしれません。