LinuxコマンドでNordVPNを設定するときのメモ。
2024-09-02 NordVPNの接続のたびに設定を上に追加されしまうので。
#!/bin/bash
# 一時的に既存のルールを削除
sudo iptables -D FORWARD -s -p tcp --dport -j ACCEPT
# NordVPNのルールが適用された後に、再度ACCEPTルールを最上位に追加
sudo iptables -I FORWARD 1 -s -p tcp --dport -j ACCEPT
2024-09-02 テスト中。どれがまずいのかだね。
テストの方法がいろいろまずかった。
ブラウザがちょっとキャッシュの影響とかいろいろ。
curl http://100.xx.xxx.xx:8088/
とかでテストしよう。
sudo iptables -I INPUT 1 -s 100.xx.xxx.xxx -p tcp --dport 8088 -j ACCEPT
みたいにルールを追加する方がいいんだけどね。
駄目なら削除していく。
ようは、行番号を確認しながら、Nordvpnが追加したルールを削除していく。
sudo iptables -L FORWARD -v -n --line-numbers
sudo iptables -D FORWARD 行番号
sudo iptables -L INPUT -v -n --line-numbers
sudo iptables -D INPUT <番号>
どれがまずいのかなと。
FOWARDのこれだった。
1 18 936 DROP all -- * * 100.64.0.0/10 0.0.0.0/0 /* nordvpn-exitnode-permanent */
なるほどな。メッシュネットワーク内の通信をドロップしちゃってるな。
sudo iptables -I FORWARD 1 -s <from_IP> -p tcp --dport <dest_port> -j ACCEPT
これで行けた。
ってことはこれを複数スクリプトで設定すればいいか。
2024-09-01 メッシュネットの関係だったようだ。
なるほど。メッシュネットを有効にするとiptablesが追加されるんだな。
ということが分かったぞと。
# sudo iptables -L INPUT -v -n
で追加されたことが分かる。
Gpt4oさんからの回答は以下。
特定のIPアドレス(例えば、100.74.xx.xxxなど)からの接続を特定のポート(例えば、49xxx)で受け入れる。
上記IPアドレスからの通信で、プライベートIPレンジ(例えば、192.168.0.0/16、10.0.0.0/8)へのアクセスを拒否する。
100.64.0.0/10範囲内のIPからの既存の通信は受け入れるが、新しい接続は拒否する。
2024-08-31 いや、Nordvpnが勝手に追加しているんだからさ。追加された後で問題になっているものを無効にしないといけないかなと。
とりあえず、NordVpnがインストールされる前のバックアップに戻した。
現在のiptablesを保存。場合によってはリストアできるように。
sudo iptables-save > /path/to/backup/iptables-backup.rules
sudo iptables-restore < /path/to/backup/iptables-backup.rules
2024-08-27 フィルタリングが原因でhttpがつながらない。
iptables-persistent の解説。
これでフィルタリングの設定を永続化できるのかな。
現在の設定を確認。
sudo iptables -L INPUT -v -n
なんだけどね。
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
をやると外部からつながるけど、
全部削除しちまっていいものか。ってね。
あと、
sudo iptables-save > /etc/iptables/rules.v4
をやると一応戻るっていうかつながる。
Gpt-4oさんに聞いた内容。
sudo iptables -A INPUT -j LOG –log-prefix “iptables-dropped: “
このログを確認して、問題を引き起こしているルールを特定します。ログは通常
/var/log/syslog
や
/var/log/kern.log に記録されます。
2024-08-26 不可思議な状態について様子見。
とりあえず分かったことはNordvpnのメッシュネットワークでアクセスできた。
IPでもマシン名でも可能だった。
あと、メッシュネットワークはVPNとは別動作みたい。
つまり、VPNつながっていなくてもメッシュネットワーク使える。つまりアクセスできる。
あと、外部からの接続できない状態が最初あった。
sudo iptables -S
sudo iptables -L -v -n
でつながったんだけど、なぜか再起動して設定元に戻ってからも問題なく接続できている。
NordvpnとDockerコンテナ(で動くWebサーバー)の起動のタイミングか??
この辺不明なので様子見中。
2024-08-26 CPUリソースの問題。NATの問題。ログインの問題調整。
ログインだけGui、Gnomeの自動起動でやるか。
#!/bin/bash
sleep 20
# NordVPNのログインを試みるスクリプト
login_status=$(nordvpn login | grep "already logged in")
if [ -z "$login_status" ]; then
echo "You are not logged in. Starting browser to login..."
login_url=$(nordvpn login | grep -oP 'https://[^\s]+')
# ここで特定のブラウザを指定して起動
firefox "$login_url"
# または
# chromium-browser "$login_url"
echo "Please complete the login in your browser."
else
echo "You are already logged in."
fi
Cronで実行かな。こんな感じ。Bootでも実行しないといけないかな。
#!/bin/bash
# 設定
EMAIL="your-email@example.com" # 通知を送信するメールアドレス
LOG_FILE="/var/log/nordvpn_check.log" # ログファイルの場所
CPU_THRESHOLD=80 # CPU使用率の閾値(%)
MEM_THRESHOLD=70 # メモリ使用率の閾値(%)
BRIDGE_IP="192.168.x.xxx" # ブリッジ接続時に使用される固定IP
# ブリッジ接続かどうかを確認
if ip a | grep -q "$BRIDGE_IP"; then
echo "$(date): ブリッジ接続が検出されました。VPN接続を維持します。" | tee -a "$LOG_FILE"
else
echo "$(date): NAT接続が検出されました。VPN接続は不要です。" | tee -a "$LOG_FILE"
nordvpn disconnect
exit 0
fi
# NordVPNの状態を取得
STATUS=$(nordvpn status)
# 接続状態の確認
if echo "$STATUS" | grep -q "Status: Connected"; then
echo "$(date): NordVPNは接続されています。" | tee -a "$LOG_FILE"
else
echo "$(date): NordVPNは接続されていません。接続を開始します。" | tee -a "$LOG_FILE"
nordvpn set lan-discovery on
nordvpn set meshnet on
nordvpn connect
# 再度接続確認
if nordvpn status | grep -q "Status: Connected"; then
echo "$(date): 再接続に成功しました。" | tee -a "$LOG_FILE"
else
echo "$(date): 再接続に失敗しました。" | tee -a "$LOG_FILE"
echo "NordVPNの再接続に失敗しました。" | mail -s "NordVPN再接続エラー" "$EMAIL"
exit 1
fi
fi
# リソース使用率の確認
CPU_USAGE=$(ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | grep nordvpn | grep -v grep | awk '{print $5}' | head -n 1)
MEM_USAGE=$(ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | grep nordvpn | grep -v grep | awk '{print $4}' | head -n 1)
if [ "$(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc)" -eq 1 ] || [ "$(echo "$MEM_USAGE > $MEM_THRESHOLD" | bc)" -eq 1 ]; then
echo "$(date): NordVPNのリソース使用量が高いため、サービスを再起動します。" | tee -a "$LOG_FILE"
# サービスを再起動
systemctl restart nordvpnd
# 少し待ってから再接続
sleep 10
# VPN接続を再確立
nordvpn connect
# 接続確認
if nordvpn status | grep -q "Status: Connected"; then
echo "$(date): サービス再起動後、接続に成功しました。" | tee -a "$LOG_FILE"
else
echo "$(date): サービス再起動後の再接続に失敗しました。" | tee -a "$LOG_FILE"
echo "NordVPNの再起動後の再接続に失敗しました。" | mail -s "NordVPN再接続エラー" "$EMAIL"
exit 1
fi
fi
2024-08-22 ログインスクリプト、自動で接続するためにいろいろ。
とりあえずログインはブラウザでGUIでやるしかないかなぁ。
Gnomeの自動起動で設定。
bash -c “/path/to/start_nordvpn/chk_login.sh”
とりあえずこれでログインしてくれーってGUIで出るようになるからな。
とりあえず起動したときにログインしていれば特に何も出ない。
#!/bin/bash
# NordVPNのログインを試みるスクリプト
login_status=$(nordvpn login | grep "already logged in")
if [ -z "$login_status" ]; then
echo "You are not logged in. Starting browser to login..."
login_url=$(nordvpn login | grep -oP 'https://[^\s]+')
# ここで特定のブラウザを指定して起動
firefox "$login_url"
# または
# chromium-browser "$login_url"
echo "Please complete the login in your browser."
else
echo "You are already logged in."
fi