Open43

Server

sakusaku

sambaの外付けHDD間で定期増分バックアップを実行させたい。

sakusaku

Ubuntu上でHDD1→HDD2への自動ミラーリング

#backup.shの作成
sudo vi backup.sh
    rsync -avud -delete /mnt/hdd1 /mnt/hdd2

#cronで定期実行(nano選択)
sudo crontab -e
1
#毎日3時に実行
0 3 * * * backup.sh > /var/log/cron.log 2>&1

#テスト実行
sudo bash backup.sh
sakusaku

-a アーカイブモード:ファイル属性を保持
-v 詳細モード:経過表示
-u 更新モード:宛先のファイルが新しい場合はコピーしない
-z 圧縮モード:転送データを圧縮し、帯域幅を節約
-delete :宛先に存在し送信元に存在しないファイルは削除する(完全ミラー)
2>&1:1が標準出力で2がエラー出力。この場合はエラー出力も標準出力にいれて吐き出してと設定している

sakusaku

ZABBIXのインストール復習

・基本は説明書通りにインストール可能
・upkgで必要なデータが入っていない(デモデータ)→tarのファイルからsqlだけ引っ張ってくる
・Agent2はpassiveでまず確認する

sakusaku

とりあえずBINDの設定はできたようなのでメモ。

Windows側からも名前解決できている。
https://changineer.info/vmware/hypervisor/vmware_ubuntu_dns.html

#bindインストール
apt install bind9 bind9utils

# confファイルを編集
vi /etc/bind/named.conf
    include "/etc/bind/named.conf.local";
    // BIND設定オプションファイル
    include "/etc/bind/named.conf.options";
    // BINDゾーン情報ファイル
    include "/etc/bind/named.conf.default-zones";

# Ubuntuはnamed.conf.localで設定
sudo vi /etc/bind/named.conf.local
    zone "saku.XXX" {
        type master;
        file "/etc/bind/saku.XXX" ;
    };
    zone "1.23.172.in-addr.arpa" {
        type master;
        file "/etc/bind/1.23.172.db" ;
    };

# オプションの設定
vi /etc/bind/named.conf.options
// SUBNET
    acl internal-network {
        172.23.1.0/24;
        172.23.10.0/24;
    };

    options {
        directory "/var/cache/bind";
    forwarders {
            8.8.8.8; // Google Public DNS
            8.8.4.4; // Google Public DNS Secoundary
    };
    // ACLの指定
    allow-query {
            localhost;
            internal-network;
    };

    recursion yes;
    forward only;
    dnssec-validation auto;
    // いったんipv6は許可しない
    listen-on-v6 { none; };
    // バージョンは教えない
    version "I won't tell you my version.";
 };

# 正引きファイル
vi /etc/bind/saku.XXX
    $TTL 86400
    @       IN      SOA     ns.saku.XXX. root.saku.XXX. (
                    2024120501      ;Serial
                    3600            ;Refresh
                    1000            ;Retry
                    604800          ;Expire
                    86400           ;Minimum TTL
    );
    @       IN NS   ns.saku.com.
    @       IN A    172.23.1.1      ;DNSサーバーのIP
    ns      IN A    172.23.1.1
    saku-samba      IN CNAME        saku-Ubuntu1
    saku-Ubuntu1    IN A    172.23.1.1
    saku-zabbix     IN CNAME        saku-Ubuntu2
    saku-Ubuntu2    IN A    172.23.1.2

# 逆引きファイル
vi /etc/bind/1.23.172.db
    $TTL 86400
    @       IN      SOA     ns.saku.XXX.    root.saku.XXX.  (
                2024120501      ;Serial
                3600            ;Refresh
                1000            ;Retry
                604800          ;Expire
                86400           ;Minimum TTL

    );
    @       IN NS   ns.saku.XXX.
    1       IN PTR  ns.saku.XXX.
    2       IN PTR  saku-Ubuntu2.saku.XXX.

# UFWの許可
ufw allow 53/tcp
ufw allow 53/udp

# 設定の反映
systemctl restart bind9 bind9utls
systemctl status bind9

# 通信確認
dig saku.XXX @127.0.0.1
dig -x 172.23.1.1 @127.0.0.1

# ローカル側のDNS設定
vi /etc/netplan/99-cloud-init.yaml →nameserver変更
もしくは
vi /etc/resolv.conf →DNSserverのIPに変更
sakusaku

CNAMEで別名を作成したら

sudo:unable to resolve host saku-Ubuntu1: Name or service not known

と表示されて実行できなくなった。
どうやらホスト名が解決できなかったことが問題らしい。

vi /etc/hosts
    127.0.1.1 hostname.domainname saku-Ubuntu1

と変更したところ実行できた。この部分も変更しておいた方が良いのか?注意。

sakusaku

NTP(chrony)のセットアップ

メイン:ntp.nict.jp
バックアップ:0.jp.pool.ntp.org / 1.jp.pool.ntp.org / 2.jp.pool.ntp.org
jp.pool.ntp.orgは、NTP POOL PROJECTのNTPサーバのこと。
https://tech.willserver.asia/2022/12/23/lix-ubt2204-ntp-server/

# インストール
apt install chrony

# 有効化
systemctl enable chrony
systemctl start chrony

# confのバックアップ
cp -a /etc/chrony/chrony.conf /etc/chrony/chrony.conf.org

# confの編集、pool部分はコメントアウト
vi /etc/chrony/chrony.conf
    # pool ntp.ubuntu.com        iburst maxsources 4
    # pool 0.ubuntu.pool.ntp.org iburst maxsources 1]
    # pool 1.ubuntu.pool.ntp.org iburst maxsources 1
    # pool 2.ubuntu.pool.ntp.org iburst maxsources 2
    # minpollとmaxpollを指定するのがWANのNTPを指定する際のマナーらしい
    # ntpサーバーはメイン1台、バックアップ3台設定しておく
    server ntp.nict.jp minpoll 6 maxpoll 8
    server 0.jp.pool.ntp.org minpoll 6 maxpoll 8
    server 1.jp.pool.ntp.org minpoll 6 maxpoll 8
    server 2.jp.pool.ntp.org minpoll 6 maxpoll 8

    # 最終行に許可IPを設定
    # Allow IPs
        deny all
        allow 172.23.1.0/24
        allow 172.23.10.0/24

# サービスの再起動
systemctl restart chrony

# NTPサーバーとの通信確認
chronycc sources
sakusaku

<server / poll> <NTPサーバのホスト名> と記載することで、上位のNTPサーバを設定できます。
オプションで記載しているminpollとmaxpollは上位のNTPサーバに問い合わせを行う間隔です。
2の階乗秒の間隔で取得しに行きます。(minpoll 6であれば最小64秒間隔、maxpoll 10であれば最大1024秒間隔)
これについては、内部のNTPサーバを参照するのであれば特に気にする必要はありませんが、外部のNTPサーバに問い合わせを行う場合、マナーとして設定しておきましょう。

sakusaku

NTPサーバーの設置と適用が終わったのでTFTPサーバーを立てて、コンフィグとファームウェア置き場を作る。

# TFTPサーバーのインストール
apt install tftpd-hpa

#オプションファイルの編集(読み込み専用になっているため、オプションにCreateを追加)
vi /etc/default/tftpd-hpa
    TFTP_USERNAME="tftp"
    TFTP_DIRECTORY="/srv/tftp"
    TFTP_ADDRESS=":69"
    TFTP_OPTIONS="--secure --create"

# サービスの有効化
systemctl enable tftpd-hpa
systemctl restart tftpd-hpa
ystemctl status tftpd-hpa

# ファイアウォールの許可設定
ufw allow 69/udp

# Ciscoからコンフィグのアップロードテスト
copy running-config tftp
> 今回立てたサーバーのIP
> test-running-config

# サーバー側でアップロードされたか確認
ls -a /srv/tftp
sakusaku

cronが正常に動いていないようなので確認する。

実行自体がされていないよう。
"* * * * *"で実行したところfile not found.の表示が出たので、とりあえずディレクトリ変えてみた。

/home/XXX/backup.sh > /usr/local/crontab/backup.sh

bashとshは基本的には同じだが、拡張bashの実行時にshが拾いきれない動きがあるとのこと。可能ならbashで動かすのがいいのかも。

sakusaku

ZABBIX側のUbuntuにNTPクライアントの設定が入れられていなかった。

これでクライアントとしての設定も終了。

# chronyのインストール
apt install chrony

# chronyのコンフィグのバックアップ&編集
cp -a /etc/chrony/chrony.conf /etc/chrony/chrony.conf.org
vi /etc/chrony/chrony.conf

# 参照元を指定(poolの入っているものはコメントアウトして使わない)
pool 172.23.1.2 iburst を追加

# サービスの再起動と有効化
systemctl enable chrony
systemctl restart chrony
systemctl status chrony
chronyc sources

# Cisco側の設定
ntp server 172.23.1.2
show ntp associations

# YAMAHA側の設定
schedule at 1 */* 00:00 * command ntpdate 172.23.1.2
sakusaku

外付けSSDが激安で手に入ったので、ここにSyslogサーバー立ててログ集約する。

sakusaku

SSHが何やっても繋がるようにならない。どうすればいいんだこれ。

sakusaku

結局色んな記事見て試したけど何をやってもだめだった。とりあえずパスワード認証で確認しようにもそこすら繋がらない。

sakusaku

Ubuntu IP固定の手順→NICでリンクアップしてないと表示されない。

cp /etc/netplan/50-cloud-init /etc/netplan/99-cloud-init.yaml
vi /etc/netplan/99-cloud-init.yaml
    dhcp4: false
    dhcp6: false
    addresses:
    - 172.23.1.3/24
    routes:
    - to: default
        via: 172.23.1.254
    nameservers:
        addresses:
        - 172.23.1.1
sakusaku

Ubuntu24.04LTS SSHの設定(パスワード認証)

# opensshのインストール
apt install openssh-server
# 接続ユーザーの.sshディレクトリのパーミッション変更
chmod 700 /home/ユーザー名/.ssh
# sshd_config(サーバー側)の変更
vi /etc/ssh/sshd_config
    PermitRootLogin without-password
    PasswordAuthentication yes
    PermitEmptyPassword no
# サービスの再起動
systemctl restart sshd

OSの再インストールを行って同じ手順で2回目は成功。ホスト名の未設定っぽい。

sakusaku

外付けHDDのマウントとフォーマット

# 外付けHDDの確認
fdisk -l
# フォーマット
umount -a /dev/sda
mkfs -t ext4 /dev/sda
# UUIDの確認
blkid /dev/sda
# マウントディレクトリの作成
mkdir /mnt/hdd
chmod 744 /mnt/hdd
# マウントの記載
vi /etc/fstab
    UUID=<uuid> /mnt/loghdd/rsyslog ntfs defaults 0 0
# 再起動して確認
shutdown -r now
# うまくいかなかったら、以下で調整
mount -a
df -h
sakusaku

SSH接続時にWARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!と表示されてアクセス不可時

SSHで接続する際には接続先毎にローカルに情報が保管されるため、中身が別のサーバになったりしていると騙されてる?って怒られることになる。

ssh-keygen -R 172.23.1.3
sakusaku

DNSスレーブサーバーの設定。

local内に設定したのでこちらも同じ場所に設置中。

# マスターサーバーの設定変更
# named.conf.optionsに以下を追加
notify yes;
also-notify { 172.23.1.2; };
# named.conf.localにゾーンごとに以下を追加
allow-transfer { 172.23.1.2; };

# スレーブサーバーの設定変更
# BINDのインストール
apt install bind9 bind9utils
# named.cconf.optionsの設定
acl internal-network {
    172.23.1.0/24;
    172.23.10.-/24;
};
options {
    listen-on port 53 { 127.0.0.1; 172.23.1.2; };
    # 内部からの問い合わせ
    allow-query     { 
        localhost;
        internal-network;
    };
    # キャッシュサーバーなので再帰問い合わせ許可(noで使うのは権威サーバー)
    recursion       yes;

    # named.conf.local に追加
    # zoneの名前としてドメイン名を指定
    zone "saku.XXX" {
            # スレーブで操作させるのでslave
            type slave;
            masters { 172.23.1.1; };
            file "slaves/saku.XXX";
            allow-transfer { none; };
    };

    # IPv4逆引き
    zone "1.23.172.in-addr.arpa" {
            type slave;
            masters { 172.23.1.1; };
            file "slaves/1.23.172.db";
            allow-transfer { none; };
    };
};

    # スレーブされたゾーンファイルが書き込めないことがある。permission deniedの場合は以下の設定を追加(apparmorの設定変更)
    vi /etc/apparmor.d/usr.sbin.named
        /var/named/slaves/** rwk,

https://qiita.com/hm7/items/c165836b857ee656b27c

sakusaku

syslogサーバーの設定(rsyslog)

# ★受信側共通
# インストール
apt install rsyslog
# ファイアウォールの許可
ufw allow 514/tcp
ufw allow 514/udp
# 設定ファイル(/etc/rsyslog.conf)の変更
vi /etc/rsyslog.conf
    # MODULES設定
    module(load="imudp")
    input(type="imudp" port="514")
    module(load="imtcp")
    input(type="imtcp" port="514")
        # UDPに限定
    $AllowedSender UDP, 127.0.0.1, 172.23.1.0/24, 172.23.10.0/24
    # GLOBAL設定
    $template recievelog, "/var/log/rsyslog/%HOSTNAME%/%$year%-%$month%-%$day%.log"
    *.* ?recievelog
# 保存フォルダの作成
mkdir /var/log/rsyslog
# 権限の変更
chown syslog:syslog /var/log/rsyslog
# サービスの再起動
systemctl restart rsyslog

# ★送信側の設定
# インストール
apt install rsyslog
# ファイアウォールの許可
ufw allow 514/udp
ufw allow 514/udp
# 設定ファイル(/etc/rsyslog.conf)の変更
vi /etc/rsyslog.conf
    # MODULES設定
    module(load="imudp")
    input(type="imudp" port="514")
    module(load="imtcp")
    input(type="imtcp" port="514")
    # GLOBAL設定(ログ出力先の指定、全ログ対象)
    *.* @172.23.1.2:514
    # 最下部に追記
    action(type="omfwd" Target="172.23.1.2" Port="514" Protocol="udp")
# サービスの再起動
systemctl restart rsyslog

# ログのテスト送信
logger "test log: syslog delivered!"
#ログの確認
tail /var/log/rsyslog/%HOSTNAME%/日付.log

# rsyslogが正常に動作しているか確認
systemctl status rsyslog
journalctl -xeu rsyslog
# rsyslogでエラーが発生していないか確認
rsyslogd -N 1

# /etc/rsyslog.d/50-default.comfの編集
*.*     @172.23.1.2:514

これでもrsyslogのディレクトリ内にホスト名のディレクトリが作成されなかった。
以下の設定を投入したところ作成された。

# ホスト名の変更
vi /etc/hosts
    127.0.0.1 saku-Ubuntu1 localhost.localdomain localhost
    127.0.1.1 saku-Ubuntu1 hostname.domainname
sakusaku

rsyslogのHDDマウントが失敗しすぎてjournalのログが溢れて容量圧迫。
プロセス停止しようとしたが、syslog.socketがアクティブとなり停止できず、以下のコマンドで停止させられた。

journalctl →HDDマウントのパーミッションエラーが連発
systemctl stop syslog.socket rsyslog.service
sakusaku

ディスク容量の空き具合を確認するコマンド。

# ディスクのパーティション単位の空き容量確認
df -h
# ディレクトリごとの容量確認(var内のディレクトリをMB単位で抽出、KBにするなら-m を-kにする、大きいものから10個)
sudo du -m /var/* | sort -rn | head -10
# ディレクトリごと直下以下も削除する
rm -rf /ディレクトリ名
sakusaku

syslogを外付けHDDに出力しようとしていたが、ずっとPermission Deniedと表示されてエラーが止まらなかったが、UbuntuのアプリケーションセキュリティであるAppArmorに弾かれていたと理解。以下の設定投入。

# AppArmorのアプリごとの設定ファイルを確認
ls -a /etc/apparmor.d

# 該当するファイルを開く(パーティション設定はusr.sbin.XXXの中に入れる)
vi /etc/apparmor.d/usr.sbin.rsyslog
    /mnt/loghdd/rsyslog/ r,
    /mnt/loghdd/rsyslog/** rwk,
sakusaku

Ubuntu24.04のタイムゾーン変更

# 現在の状態を確認
strings /etc/localtime
    TZif2
    TZif2
    UTC0 →UTCのままになってる

# タイムゾーンの変更
datetimectl set-timezone Asia/Tokyo
sakusaku

Q.すでにデータが入っているディレクトリに、HDDをマウントした場合どのような挙動をする?

A.マウントされたHDDのデータは閲覧できるが、もともとそのディレクトリに入っていたデータは閲覧できなくなる。
今回はデータが入った状態で誤ってマウント→どうしても容量が何やっても減らない→原因はもともとディレクトリに入っていたファイルの容量が大きかった、ということが発生。

ディレクトリパスも、マウントしたものと統合され存在自体が見えなくなってしまうため、データがないことを確認してからマウントしましょう…。

sakusaku

Syslogの出力量が多すぎて、一旦出力制御をしてみた。/etc/systemd/journald.confを編集する。

# journald.conf の編集
vi /etc/systemd/journald.conf
    # 1分で300回のログ発生があった場合は破棄する
    RateLimitInterval=1m
    RateLimitBurst=300
# サービスの再起動
systemctl restart systemd-journald
sakusaku

Ubuntu上でrm -rfでディレクトリごと消しても、容量が戻ってこないことがあった。
一旦すべてのマウントをやり直すことで改善するらしい。

# 対象のサービスをまず止める(今回はrsyslog)
systemctl stop syslog.socket rsyslog.service
# 消す
rm -rf /var/log/syslog
# すべてのマウント状態解除
umount -a
# すべて再マウント
mount
# 容量確認
df -h
sakusaku

Cronのログで以下のものが繰り返し表示され、ログを圧迫していた。

2024-12-13T14:17:01+09:00 saku-Ubuntu1 CRON[6717]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
2024-12-13T14:17:01+09:00 saku-Ubuntu1 CRON[6717]: pam_unix(cron:session): session closed for user root
2024-12-13T17:05:01+09:00 saku-Ubuntu1 CRON[7512]: pam_unix(cron:session): session closed for user root
2024-12-13T14:25:01+09:00 saku-Ubuntu1 CRON[6753]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
2024-12-13T14:25:01+09:00 saku-Ubuntu1 CRON[6753]: pam_unix(cron:session): session closed for user root

調べたところ、一応以下の手順で非表示にはできるとのこと。

# /etc/pam.d/common-session-noninteractive の編集
vi /etc/pam.d/common-session-noninteractive
# 以下のように編集
   # here are the per-package modules (the "Primary" block)
   session [default=1]                     pam_permit.so
   # here's the fallback if no module succeeds
   session requisite                       pam_deny.so
   # prime the stack with a positive return value if there isn't one already;
   # this avoids us returning an error just because nothing sets a success code
   # since the modules above will each just jump around
   session required                        pam_permit.so
   # and here are more per-package modules (the "Additional" block)
   ★この一行を追加
   session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid
   session required        pam_unix.so

おまじないなのか?時間を取って確認が必要。
https://iww.hateblo.jp/entry/20221025/cron

sakusaku

まだ改善せず表示されていそうな感じがする。

sakusaku

rsyslogのエラーは収束しそうなので、ログローテーションの設定を進めることに。

sakusaku

ログローテーションの設定

デフォルトの設定とサービス別の設定があるらしい。

# デフォルトの設定は以下
vi /etc/logrotate.conf
    Weekly → Daily
    rotate 4 → 1
# サービスごとの設定はもう一つ下の階層
vi /etc/logrotate.d/rsyslog
    Weekly → Daily
    rotate 4 → 1
sakusaku

rsyslogのディスククエリエラーの暫定対応

サーバー1台からのみ、以下のエラーがずっと出続けていた。

rsyslogd[40403]: rsyslogd: error starting up disk queue, using pure in-memory mode
rsyslogd[40403]: rsyslogd: action-9-builtin:omfwd queue: error creating disk queue - giving up.

一応キューの部分を対応したところ、今のところエラーが表示されなくなった。

# spoolのディレクトリの下層にrsyslogのディレクトリがあるので移動
cd /var/spool/rsyslog
# この下に書き込みができずスプールされたデータが多数存在していた
ls -a
    saku-Ubuntu1.saku.com.00000061
    saku-Ubuntu1.saku.com.00000062
    saku-Ubuntu1.saku.com.00000063
    saku-Ubuntu1.saku.com.00000064
    saku-Ubuntu1.saku.com.00000065
    saku-Ubuntu1.saku.com.qi →本当はこれだけっぽい?
# 全部消してサービス再起動してみた
rm *
systamctl restart syslog.socket rsyslog.service

もっとLinuxに慣れたら仕組みを理解したい。
https://qiita.com/mokemokechicken/items/274d4bdbaf07c3321e18

sakusaku

ZABBIXのSNMP監視のためのテスト実施

SNMPでの監視を行う場合、マネージャとエージェントでSNMPの通信が取れているかを確認する。
手順は以下の通り。

#必要な機能をインストール
apt install net-snmp net-snmp-utils

#疎通ができているかを確認(バージョンv2c、コミュニティ名はrouter)
snmpwalk -v 2c -c router <監視先IP>
sakusaku

VPN環境(Wireguard)の構築

WireguardをLinuxにインストールし、外部からVPNでリモートアクセスができるようにする。
https://note.com/rcat999/n/n78f23ad6ec2d

DDNSの設定

パブリックIPが動的IPなので、DDNS Nowを使用して対応することにした。

  1. DDNS Nowにアクセス
  2. 希望のホスト名とパスワードを入力
  3. マニュアルに沿って、cronで定期的に通信を出すようにしておく(https://ddns.kuku.lu/manual.php#cron )

Wireguardのインストール

今回はProxmox上にCTを作成し、そっちを経由して宅内へ接続する。

  1. ProxmoxでCTの作成(今回は????を利用)

  2. Wireguardのインストール

     #インストール
     sudo apt install wireguard
     #秘密鍵の作成→メモ
     wg genkey
     #公開鍵の作成→さっきの秘密鍵が必要→メモ
     wg pubkey <秘密鍵>
    
  3. 設定ファイルの作成

     #ディレクトリの移動
     cd /etc/wireguard
     #設定ファイルの追加と編集
     vi /etc/wireguard/wg0.conf →設定ファイル名はインターフェースの名前と同じにすること
         [Interface]
             PrivateKey = <サーバーの秘密鍵>
             Address = 10.0.0.1/24
             ListenPort = 51820
             PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0@if13 -j MASQUERADE
             PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0@if13 -j MASQUERADE
             Table = off
             
         [Peer]
             PublicKey = <接続側の公開鍵>
             AllowedIPs = 10.0.0.2/32
    
  4. 設定ファイルへ追加設定

     #接続したWireguardサーバーを踏み台にして、LAN内端末へ接続できるようにする(削除時は消す)
     [Interface]に追加
         PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
         PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
     #デフォルトではすべての通信をVPN先に向けているため、ローカルでインターネットアクセスを可能にする
     [Interface]に追加
         Table = off
    
     #カーネルパラメータを変更し、パケットフォワードができるようにする
     vi /etc/sysctl.conf
        net.ipv4.ip_forword=1 のコメントアウトを外して有効化する
    
  5. サービスの再起動

     #作成したインターフェースでWireguardを起動する
     wg-quick up wg0
     #ルートが作成されたか確認
     ip route
    
sakusaku

VPNの構築(Wireguard)ネットワーク設定

内向きの通信になるため、静的NAPTの設定が必要になる。
今回はauひかりと891fjでの構成で設定をリマインド。
https://ibulog.me/blog/ix2207-au/

auひかりHGWの設定

今回はとりあえずDMZに設定を入れ、中へ通すようにする。

  1. HGWの設定画面に入る
  2. DMZホスト設定>ONにし、IPアドレスにホスト側(今回は10.1.1.2)を入れる
  3. DHCPを無効にしておく

Cisco 891fjの設定

WANから届く特定のポートへの通信を特定のIPへ振り分ける。

    #静的NAPTの設定
    ip nat inside source static udp <WAN側IP> <WAN側ポート番号> interface <インターフェース名> <Wireguardサーバー側ポート番号>
    #今回は
    ip nat inside source static udp 172.23.1.11 51281 interface gi8 51280

Android Wireguardの設定

  1. 空の状態から作成
  2. 以下のように設定
    ・名前…適当に
    ・秘密鍵…作成したクライアントの秘密鍵
    ・アドレス…wg0.confのpeerに入力したIP(今回は10.0.0.2/32)
    ・ポート…wg0.confのpeerに入力したポート(今回は51821)
    ・ピア側公開鍵…作成したサーバーの公開鍵
    ・ピア側AllowedIP…wg0.confのAllowedIPに入れた許可範囲IP(今回は0.0.0.0/0)
    ・エンドポイント…固定グローバルIPもしくはホスト名:接続ポート(今回はホスト名:51821)
  3. 接続し、送信と受信がどちらも値が増え、直近のハンドシェイクが更新されていれば成功
sakusaku

Wireguardへアクセスできるクライアントを増やす(Windows)

複数の端末で証明書を作成して、それぞれアクセスできるようにする。
https://mikolabo.net/index.php/2021/05/29/wireguard-win/

wg0.confの編集

wg genkey と wg pubkeyで追加クライアント用の秘密鍵と公開鍵を準備し、設定ファイルを編集。

#wg0.confを開く
vi /etc/wireguard/wg0.conf
#Peerの設定を追加する(Interfaceは変更しない)
[Peer]
PublicKey = <クライアントの公開鍵>
AllowedIPs = 10.0.0.3/32

Windowsの設定

Wireguardのアプリケーションをインストールして、メモ帳などで以下の設定ファイルを作成する。

#メモ帳などで以下の内容を入力
[Interface]
Address = 10.0.0.3/32
PrivateKey = <クライアントの秘密鍵>

[Peer]
PublicKey = <Wireguardサーバーの公開鍵>
AllowedIPs = 0.0.0.0/0
Endpoint = <ホスト名>:51821
PersistentKeepalive = 25

名称をwg0.confなどに変更し、「ファイルからインポート」を行うと設定を入れられる。
接続の可否はハンドシェイクができたかで判断できる。

IPは前回設定した1つしか使用できないわけではなく、Peerで追加していけば大丈夫のよう。

DNSの設定

この設定だとLAN内の通信だけしか通らないため、コントロールパネル>ネットワーク>wg0を選択し、
DNSを固定(うちの設定だと172.23.1.9と172.23.1.10)、もしくはDHCPに変更しておく。IPも固定とDHCPどっちでもよい。
そうするとインターネットにも出られるようになる。

sakusaku

プロキシサーバーの構築(Squid)

Proxmox上にプロキシサーバーを立てて、フォワードプロキシとして外向き通信で使用する。
IPは172.23.1.13、ポートはデフォルトの3128を使用する。(conf内で3128検索すれば表記出てくる)
https://qiita.com/nkojima/items/0d6bd71e9e66814c7951
https://ameblo.jp/shige2006/entry-12811211928.html

Firewalldのインストール

ノード内ファイアウォールとして今回はfirewalldを使用してみる。

#firewalldのインストール
apt install firewalld
#ファイアウォールの設定内容確認
firewall-cmd --list-all
    public
          target: default
          icmp-block-inversion: no
          interfaces: 
          sources: 
          services: dhcpv6-client ssh →ここにsquidを追加したい
          ports: 
          protocols: 
          forward: yes
          masquerade: no
          forward-ports: 
          source-ports: 
          icmp-blocks: 
          rich rules: 

#firewallを通すサービスとしてsquidを登録
firewall-cmd --add-service=squid --zone=public --permanent
firewall-cmd --add-service=squid --zone=public

Squidのインストールと設定

#Squidのインストール
apt install squid
#設定ファイルのバックアップ
cp -a /etc/squid/squid.conf /etc/squid/squid.conf.org
#設定ファイルの編集
vi /etc/squid/squid.conf
    #デフォルトで記載されているlocalnetのネットワークをそのまま使うが、http_accessの記載がないので追加
    http_access allow localnet
    #DNSの設定も入っていないので追加
    dns_nameservers 172.23.1.9 172.23.1.10 →コメントアウトされているのを外す

#LAN内のフォワードを許可する
vi /etc/sysctl.conf
#以下の行のコメントアウトを外す
net.ipv4.ip_forward=1

#サービスの有効化と再起動
systemctl enable squid
systemctl start squid

Windowsでプロキシの設定

  1. 設定>プロキシの設定>プロキシサーバーを使う

  2. プロキシIPをサーバーのもの、ポートは3128にする

  3. 接続し、インターネットに繋がるか確認する

  4. サーバー側で変換されているか確認するには、

     tail /var/log/squid/access.log で確認できる
    
sakusaku

ドキュメント管理サーバーの構築(Paperless-ngx)

資料の置き場が欲しかったので、Paperless-ngxを立ち上げることにする。
練習でDocker上に立てる。
https://tkyonezu.com/os-linux-windows/almalinux/almalinux-第24回-rocky-linux-第11回「dockerのインストール」/
https://picockpit.com/raspberry-pi/ja/ラズベリーパイでペーパーレスオフィスを作る/

RHEL系のDockerインストール

RHEL系で使用できるdnfとyumを活用する。
今回はRocky Linux 9を使用。

#まずはyum-utilsパッケージのインストールし、Dockerのリポジトリを登録
dnf install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

#Dockerのパッケージをインストール
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#インストール中のGPG鍵が「060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35」になっていることを確認して「y」で進める
 Fingerprint: 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35
 From       : https://download.docker.com/linux/centos/gpg
    これでよろしいですか? [y/N]: y

#Docker自動起動の設定
systemctl start docker.service
systemctl enable docker.service

#一般ユーザーの作成(※Paperless-ngxの立ち上げでは一般ユーザーからの起動が必要)
useradd xxx
passwd xxx →パスワード指定
#Dockerグループを作成し、ユーザーを追加する
newgrp docker
usermod -aG docker xxx
#ユーザーが登録されているか確認
cat /etc/passwd

#一般ユーザー側でwgetを使うので、インストールしておく
dnf install wget

この後は作成した一般ユーザーに切り替える。

#Paperless-ngxのインストールを行う
bash -c "$(curl --location --silent --show-error https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/install-paperless-ngx.sh)"
#インストールスクリプトでいくつか指定を求められる
    ・サイト名
    ・ポート番号
    ・ユーザー名とパスワード
    ・メールアドレス(そのままで大丈夫)

#Docker上でコンテナの作成が進む→結構時間がかかる

完了後、http://<サーバーIP>:8000 でアクセスするとサインイン画面が表示されるので、設定時に入力したIDパスワードでアクセスする。

結構GUIがいい感じ…、元がラズパイだから容量少ないのでどこかで足したい。
活用していきたい!PDF記事とかまとめて!

sakusaku

ストリーミングサーバーを作る(nginxとrtmp)

https://qiita.com/bellx2/items/4239bb2fc2f47469ee4d
Proxmox上のコンテナに設置。
ほぼ記載内容のままでOK。
ファイアウォールはufwを使用した。

めちゃくちゃ簡単なのに、スライド共有程度なら問題なく配信できている感じ。
(映像などはもちろん厳しい)
ここからチューンアップできたらもっと面白そう。