雑な備忘録が多いブログ

ももクロとエビ中を推している弱いパソコンオタクです

Proxmox VE上でSoftether VPN Serverを建てるときの勘所

RTX1200のVPNの調子があまりよろしくないので何かしらVPNサーバを別で用意したいなー, とか思ってるときにバイトでSoftetherを触る機会があった.

いい機会だと思って検証環境で構築をやってみたんだが, 結構詰まって大変だったのでメモとして残しておく.

構成・環境

Proxmox VE上にCentOS7ホストを建てて, そこにSoftether Serverをいんすこしたという感じ.
サーバ側
- Proxmox VE 7.0-11
- CentOS7.9.2009
- Softether v4.34-9745

ちなみにSoftetherはリージョンロックを外してある. 方法は以下を参照.

mikolabo.net

リージョンロックを外すと, RADIUS認証やAD認証, syslogの外部送信などが出来るようになる. 通常は有償版のPacketiXでしか提供されてないらしい.

管理ツール
- Windows Server 2019
普通にインストーラを落としてきただけ.

一応クライアント側の環境
- Pop!_OS 21.10 (kernel 5.17.5)

勘所

構築の手順は検索すれば山ほど出てくるので割愛.

詰まったのはSecureNATとローカルブリッジ周りの話.
当初, CentOSホストはNICを一枚しか持っていなかった. これをローカルブリッジで仮想HUBとブリッジさせていた.
この状態では, 仮想ホストとの通信までは出来るものの, CentOSホストが存在しているセグメント内の他のホストとの通信が出来なかった.
以下の手順を踏むと, LAN内の他のホストと通信出来るようになった.

  • NICを一枚追加して, そいつのアドレスを0.0.0.0に設定
  • 既存のローカルブリッジ設定を削除, さっき追加したNICと仮想HUBをローカルブリッジする

自分の環境ではRTX1200がDHCPサーバを兼ねているのでSecureNATは切っておく必要がある.
1. クライアントが仮想HUBに接続開始
2. RTX1200がクライアントの仮想NICにアドレスを振る
3. セッション確立
の流れで通信が出来るようになった.

調べてて分かったこと

ESXiやHyper-v, Virtual Box等ではプロミスキャスモードが禁止されている場合が多く, それが原因でローカルブリッジが正常に動作しないことがあるらしい(ローカルブリッジを設定しようとすると注意画面が出てくる).
当初, プロミスキャスモード関連の問題を疑ったが, Proxmoxのスタッフが以下のように述べておりその線は消えた. forum.proxmox.com

setting the bridge-port to promiscous (up /sbin/ip link set enp3s0 promisc on) is not necessary since ifup does this anyways (else the bridge would not get all traffic for other mac-addresses)

この内容からすると, PVE上でSoftether Serverを動かすときはプロミスキャスモードには気を使わなくていい, ということらしい(多分)

某お話会アプリを録画するために頑張ってみた話(失敗)

失敗, というか一応起動までは成功したので備忘録. ここに書いてあることだけでは推しとお話することは出来ません.

すうぅぅぅ...って感じのあのアプリ(わかる人にはわかる), 画面録画をしていると通話画面がブラックアウトする仕様になっており素直に画面録画をするのは無理.

「じゃあエミュの上で泥アプリ動かしてウィンドウをOBSで録画すれば良くね?」という発想からちょっと試してみた.

  • ソフトウェア

absarcs.info

この構成, かつ上のリンクの内容を実施すると起動出来た. Galaxyの9.0とかはインストールまでは出来たが起動が出来なかった.

挫折したのは, カメラの設定をDummyからUSB接続されたカメラに切り替えるとその後VMが起動しなくなる現象に遭遇したため

録画出来たところで, きったない自分の声を聞いたら萎えるよなぁ...的なアレもあるので今後頑張るかどうかは分かりません.

2022年7月11日追記 昨日中山莉子さんお話し会に初めて参加した. ド緊張のあまりアッアッとかやってしまったのを非常に後悔しているし, キモオタモード全開になった自分を録画するのはこの上ない拷問であること間違いなしなのでこれ以上はやりません.

RTX1200のVPNをActive Directory(Windows Server2019)で認証させようとしたらハマった in 2021

時間ないのでとりあえずなぐり書き

やろうとしたことはタイトル通り. 以下の記事を参考にしました.

syobon.jp

yowatari.hatenablog.com

blog.goo.ne.jp

しかし手順通りにやっても, 何度試してもつながらん. 数日頭抱えていたらこれを見つけました.

social.technet.microsoft.com

こっちの記事でも紹介されています.

ityorozuya.hatenablog.com

ファイアウォールに1812と1813を開けっ放しにするカスタムルールを入れたら一発でつながった.

ローカルに保存してある論文(PDF)のタイトルをまとめてググる方法

概要

文献のリストを作らにゃならんという事になったんだが, 今までまともな文献管理ソフトを使ってなかったので非常に困った. ということでローカルに保存してあるPDFのタイトルをえいやっとググってあとは人力でどうにかしたろうという目論見.

環境

一応 OS: Ubuntu 21.04
Bash: 5.1.4

ワンライナーで書く

こんだけ. もっと賢い方法あったら教えてクレメンス

$PRE_IFS=$IFS; IFS=$'\n'; ls |while read; do sed 's/\.[^\.]*$//'; sed 's/_/ /g';done | (while read;do filename=`sed -e 's/_/ /g' -e 's/^/https:\/\/www.google.com\/search?q=/' `;firefox --newtab $filename ;done)

reCAPTCHAが

reCAPTCHAがここぞとばかりに起動したりしなかったりする. 小分けにするとしなかったりするけど結構したりもする. ここは気合で乗り切る(地獄)

NETGEARのJGS524PEでパケロスが頻発してた話

概要

研究室のLANに置いてあるJGS524PEでパケロスが頻発してた話. 初歩的すぎて恥ずかしいが備忘録として書いておく.

環境・構成

f:id:cd_sioremon:20210830135436j:plain
見づらいけど許して

こんな感じ RTX1200でポートVLANを切ってそのままスイッチに食わせていた.

状況

どのVLANでもパケロスが頻発していた. 良い時で20%程度, 酷い時は96%くらい損失していた. 特にAPはあまりの使えなさに誰も使う人がいなくなっていたという状況.

どうなったの

RTXのポートに直挿ししてデフォゲまでpingを叩くとどのポートでも損失0%. スイッチを通した後に損失してるとして, VLANの設定だろうと踏んだ.

元々VLAN -> Port-based -> Advancedからスイッチ側のVLANを設定していたがこれがあかんかった模様. 802.1Qで設定し直したらパケロスしなくなりました.

感想

初心者すぎて何で直ったか理解してない. ちゃんと勉強します.

Ubuntu20.10でRの環境構築をやる

概要

Pop!_OS 20.10を使ってるが, Rのインストールにちょっとハマったのでメモ.

インストール

普通にaptでインストールしようとするとdependencyを解決出来なくてコケる. どうしようもないので自分でビルドする.

sudo apt-get install -y gfortran libreadline6-dev libx11-dev libxt-dev libpng-dev libjpeg-dev libcairo2-dev xvfb libzstd-dev texinfo texlive texlive-fonts-extra screen wget zlib1g-dev libbz2-dev liblzma-dev libpcre2-dev libcurl4-openssl-dev openjdk-11-jdk
cd /usr/local/src
sudo wget https://cran.rstudio.com/src/base/R-4/R-4.0.3.tar.gz
sudo su
tar zxvf R-4.0.3.tar.gz
cd R-4.0.3
./configure --enable-R-shlib
make
make install
cd ..
rm -rf R-4.0.3*
exit
cd

これでビルド出来る. RとRscriptのインストールはこれでおk.

その他

  • RstudioのインストールはRのインストールが終わってからやる. RstudioはバックエンドにRを使ってるのでRがインストールされてないと動かない.
  • VSCode上でRを書きたい人はjsonliteをインストールした方が良い.
    • $R
    • > install.packages('jsonlite') これでおk

texで現在のページ/総ページ表記をさせたい

概要

【2022年6月22日 追記】
この記事は慶應義塾大学SFCの大学院受験に際して, 研究計画書をtexで書かないと死んでしまう奇特な人に向けたものです. 素直にWordで書いた方が楽だと思います.
【追記終わり】

院の研究計画書(14ページ参照)現在のページ数/総ページ数てな感じのフォーマットを指定されてた.
苦労したのでメモ.

環境

  • Pop!_OS 20.10
  • texlive 2020

texファイルの編集

プリアンブルに \usepackage{myfancyhdr}\usepackage{lastpage}, \pagestyle{fancy}, \cfoot{\thepage{}/{}\pageref{LastPage}}を追加する.
こんな感じ.

\documentclass[a4j,10pt, twocolumn]{jarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage{myfancyhdr}
\usepackage{amssymb}
% \usepackage{amsmath}
\usepackage{float}
\usepackage{usebib}
\bibinput{refs}
\usepackage{lastpage}
% \usepackage{slashbox}
%---------------------------------------------------
% ページの設定
%---------------------------------------------------
\setlength{\textwidth}{170truemm}
\setlength{\textheight}{250truemm}
\setlength{\topmargin}{-14.5truemm}
\setlength{\oddsidemargin}{-5.5truemm}
\pagestyle{fancy}
\cfoot{\thepage{}/{}\pageref{LastPage}}
\setlength{\headheight}{0truemm}
\setlength{\parindent}{1zw}

ちなみに使ったテンプレートはこれです.

styファイルを用意する

自分の環境だと

/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty

に目的のstyファイルがあった.

$kpsewhich fancyhdr.sty

でインストールされてるパスが分かる. こいつをcatしてコピペするなりcpするなりして作業ディレクトリに持っていきmyfancyhdr.styとして保存.

公式リポジトリから落としてきてもいいがバージョンが変わってるはずので適宜読み替えるか, 下に貼ったやつを丸コピしてください.

23行目を

\ProvidesPackage{fancyhdr}%

から

\ProvidesPackage{myfancyhdr}%

に変更する.

次に146-152行目と181行目をコメントアウトする. 181行目はコメントアウトしなくても大丈夫だけど, しなかったらページの上部に謎の横線が入る. 説明ダルいからどんな風になるかはコンパイルして確認してみてください. とりあえずここを消すと単にページ番号の表記が目的通りになる.

以下編集後のファイル全文

%%
%% This is file `fancyhdr.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% fancyhdr.dtx  (with options: `fancyhdr')
%% 
%% This is a generated file.
%% 
%% This file may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License, either version 1.3 of this license
%% or (at your option) any later version.  The latest version of this
%% license is in:
%% 
%%    http://www.latex-project.org/lppl.txt
%% 
%% and version 1.3 or later is part of all distributions of LaTeX version
%% 2005/12/01 or later.
%% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{myfancyhdr}%
           [2019/01/31 v3.10
                  Extensive control of page headers and footers]%
% Copyright (C) 1994-2019 by Piet van Oostrum <piet@vanoostrum.org>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\if@nch@mpty#1{\def\temp@a{#1}\ifx\temp@a\@empty}
\def\f@nch@def#1#2{\if@nch@mpty{#2}\f@nch@gbl\def#1{\leavevmode}\else
                                   \f@nch@gbl\def#1{#2\strut}\fi}
\let\f@nch@gbl\global
\newcommand{\f@nch@ifundefined}[1]{%
  \begingroup\expandafter\expandafter\expandafter\endgroup
  \expandafter\ifx\csname #1\endcsname\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
    \fi}
\newcommand\f@nch@errmsg[1]{%
  \f@nch@ifundefined{PackageError}{\errmessage{#1}}{\PackageError{Fancyhdr}{#1}{}}}
\newcommand\f@nch@warning[1]{%
  \f@nch@ifundefined{PackageWarning}{\errmessage{#1}}{\PackageWarning{Fancyhdr}{#1}{}}}
\newcommand{\f@nch@forc}[3]{\expandafter\f@rc\expandafter#1\expandafter{#2}{#3}}
\newcommand{\f@rc}[3]{\def\temp@ty{#2}\ifx\@empty\temp@ty\else
                                    \f@nch@rc#1#2\f@nch@rc{#3}\fi}
\def\f@nch@rc#1#2#3\f@nch@rc#4{\def#1{#2}#4\f@rc#1{#3}{#4}}
\newcommand{\f@nch@for}[3]{\edef\@fortmp{#2}%
  \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}}
\newcommand\f@nch@default[3]{%
  \edef\temp@a{\lowercase{\edef\noexpand\temp@a{#3}}}\temp@a \def#1{}%
  \f@nch@forc\tmpf@ra{#2}%
  {\expandafter\f@nch@ifin\tmpf@ra\temp@a{\edef#1{#1\tmpf@ra}}{}}%
  \ifx\@empty#1\def#1{#2}\fi}
\newcommand{\f@nch@ifin}[4]{%
  \edef\temp@a{#2}\def\temp@b##1#1##2\temp@b{\def\temp@b{##1}}%
  \expandafter\temp@b#2#1\temp@b\ifx\temp@a\temp@b #4\else #3\fi}
\newcommand{\fancyhead}[2][]{\f@nch@fancyhf\fancyhead h[#1]{#2}}%
\newcommand{\fancyfoot}[2][]{\f@nch@fancyhf\fancyfoot f[#1]{#2}}%
\newcommand{\fancyhf}[2][]{\f@nch@fancyhf\fancyhf {}[#1]{#2}}%
\newcommand{\fancyheadoffset}[2][]{\f@nch@fancyhfoffs\fancyheadoffset h[#1]{#2}}%
\newcommand{\fancyfootoffset}[2][]{\f@nch@fancyhfoffs\fancyfootoffset f[#1]{#2}}%
\newcommand{\fancyhfoffset}[2][]{\f@nch@fancyhfoffs\fancyhfoffset {}[#1]{#2}}%
\def\f@nch@fancyhf#1#2[#3]#4{%
  \def\temp@c{}%
  \f@nch@forc\tmpf@ra{#3}%
  {\expandafter\f@nch@ifin\tmpf@ra{eolcrhf,EOLCRHF}%
    {}{\edef\temp@c{\temp@c\tmpf@ra}}}%
  \ifx\@empty\temp@c\else \f@nch@errmsg{Illegal char `\temp@c' in
    \string#1 argument: [#3]}%
  \fi \f@nch@for\temp@c{#3}%
  {\f@nch@default\f@nch@@eo{eo}\temp@c \if@twoside\else \if\f@nch@@eo
    e\f@nch@warning {\string#1's `E' option without twoside option is
      useless}\fi\fi \f@nch@default\f@nch@@lcr{lcr}\temp@c
    \f@nch@default\f@nch@@hf{hf}{#2\temp@c}%
    \f@nch@forc\f@nch@eo\f@nch@@eo
        {\f@nch@forc\f@nch@lcr\f@nch@@lcr
          {\f@nch@forc\f@nch@hf\f@nch@@hf
            {\expandafter\f@nch@def\csname
              f@nch@\f@nch@eo\f@nch@lcr\f@nch@hf\endcsname {#4}}}}}}
\def\f@nch@fancyhfoffs#1#2[#3]#4{%
  \def\temp@c{}%
  \f@nch@forc\tmpf@ra{#3}%
  {\expandafter\f@nch@ifin\tmpf@ra{eolrhf,EOLRHF}%
    {}{\edef\temp@c{\temp@c\tmpf@ra}}}%
  \ifx\@empty\temp@c\else \f@nch@errmsg{Illegal char `\temp@c' in
    \string#1 argument: [#3]}%
  \fi \f@nch@for\temp@c{#3}%
  {\f@nch@default\f@nch@@eo{eo}\temp@c \if@twoside\else \if\f@nch@@eo
    e\f@nch@warning {\string#1's `E' option without twoside option is
      useless}\fi\fi \f@nch@default\f@nch@@lcr{lr}\temp@c
    \f@nch@default\f@nch@@hf{hf}{#2\temp@c}%
    \f@nch@forc\f@nch@eo\f@nch@@eo
        {\f@nch@forc\f@nch@lcr\f@nch@@lcr
          {\f@nch@forc\f@nch@hf\f@nch@@hf
            {\expandafter\setlength\csname
              f@nch@O@\f@nch@eo\f@nch@lcr\f@nch@hf\endcsname {#4}}}}}%
  \f@nch@setoffs}
\newcommand{\lhead}[2][\f@nch@olh]%
                     {\f@nch@def\f@nch@olh{#2}\f@nch@def\f@nch@elh{#1}}
\newcommand{\chead}[2][\f@nch@och]%
                     {\f@nch@def\f@nch@och{#2}\f@nch@def\f@nch@ech{#1}}
\newcommand{\rhead}[2][\f@nch@orh]%
                     {\f@nch@def\f@nch@orh{#2}\f@nch@def\f@nch@erh{#1}}
\newcommand{\lfoot}[2][\f@nch@olf]%
                     {\f@nch@def\f@nch@olf{#2}\f@nch@def\f@nch@elf{#1}}
\newcommand{\cfoot}[2][\f@nch@ocf]%
                     {\f@nch@def\f@nch@ocf{#2}\f@nch@def\f@nch@ecf{#1}}
\newcommand{\rfoot}[2][\f@nch@orf]%
                     {\f@nch@def\f@nch@orf{#2}\f@nch@def\f@nch@erf{#1}}
\newlength{\f@nch@headwidth} \let\headwidth\f@nch@headwidth
\newlength{\f@nch@O@elh}
\newlength{\f@nch@O@erh}
\newlength{\f@nch@O@olh}
\newlength{\f@nch@O@orh}
\newlength{\f@nch@O@elf}
\newlength{\f@nch@O@erf}
\newlength{\f@nch@O@olf}
\newlength{\f@nch@O@orf}
\newcommand{\headrulewidth}{0.4pt}
\newcommand{\footrulewidth}{0pt}
\f@nch@ifundefined{footruleskip}%
      {\newcommand{\footruleskip}{.3\normalbaselineskip}}{}
\newcommand{\plainheadrulewidth}{0pt}
\newcommand{\plainfootrulewidth}{0pt}
\newif\if@fancyplain \@fancyplainfalse
\def\fancyplain#1#2{\if@fancyplain#1\else#2\fi}
\headwidth=-123456789sp
\let\f@nch@raggedleft\raggedleft
\let\f@nch@raggedright\raggedright
\let\f@nch@centering\centering
\let\f@nch@everypar\everypar
\def\f@nch@reset{\f@nch@everypar{}\restorecr\endlinechar=13
  \let\\\@normalcr \let\raggedleft\f@nch@raggedleft
  \let\raggedright\f@nch@raggedright \let\centering\f@nch@centering
  \def\baselinestretch{1}%
  \hsize=\headwidth
  \def\nouppercase##1{{\let\uppercase\relax\let\MakeUppercase\relax
      \expandafter\let\csname MakeUppercase \endcsname\relax##1}}%
  \f@nch@ifundefined{@newbaseline} % NFSS not present; 2.09 or 2e
  {\f@nch@ifundefined{@normalsize} {\normalsize} % for ucthesis.cls
   {\@normalsize}}%
  {\@newbaseline}% NFSS (2.09) present
  }
\fancyhf{}
% Lines 146-152 were commented out by sioremon on May 14, 2021
% \if@twoside
%   \fancyhead[el,or]{\fancyplain{}{\slshape\rightmark}}
%   \fancyhead[er,ol]{\fancyplain{}{\slshape\leftmark}}
% \else
%   \fancyhead[l]{\fancyplain{}{\slshape\rightmark}}
%   \fancyhead[r]{\fancyplain{}{\slshape\leftmark}}
% \fi
\fancyfoot[c]{\rmfamily\thepage} % page number
\newcommand\f@nch@vbox[2]{%
  \setbox0\vbox{#2}%
  \ifdim\ht0>#1\relax
    \f@nch@warning{%
      \string#1 is too small (\the#1): ^^J%
      Make it at least \the\ht0.^^J%
      We now make it that large for the rest of the document.^^J%
      This may cause the page layout to be inconsistent, however\@gobble
    }%
    \dimen0=#1\relax
    \global#1=\ht0\relax
    \ht0=\dimen0 %
  \fi
  \box0}
\newcommand\f@nch@head[5]{%
  #1%
  \hbox to\headwidth{%
    \f@nch@reset
    \f@nch@vbox\headheight{%
      \hbox{%
        \rlap{\parbox[b]{\headwidth}{\raggedright#2}}%
        \hfill
        \parbox[b]{\headwidth}{\centering#3}%
        \hfill
        \llap{\parbox[b]{\headwidth}{\raggedleft#4}}%
      }%
      % Lines 181 were commented out by sioremon on May 14, 2021
      % \headrule
    }%
  }%
  #5%
}
\newcommand\f@nch@foot[5]{%
  #1%
  \hbox to\headwidth{%
    \f@nch@reset
    \f@nch@vbox\footskip{%
      \setbox0=\vbox{\footrule}\unvbox0
      \vskip\footruleskip
      \hbox{%
        \rlap{\parbox[t]{\headwidth}{\raggedright#2}}%
        \hfill
        \parbox[t]{\headwidth}{\centering#3}%
        \hfill
        \llap{\parbox[t]{\headwidth}{\raggedleft#4}}%
      }%
    }%
  }%
  #5%
}
\def\headrule{{\if@fancyplain\let\headrulewidth\plainheadrulewidth\fi
    \hrule\@height\headrulewidth\@width\headwidth
    \vskip-\headrulewidth}}
\def\footrule{{\if@fancyplain\let\footrulewidth\plainfootrulewidth\fi
    \hrule\@width\headwidth\@height\footrulewidth}}
\def\ps@fancy{%
  \f@nch@ifundefined{@chapapp}{\let\@chapapp\chaptername}{}% for amsbook
\f@nch@ifundefined{MakeUppercase}{\def\MakeUppercase{\uppercase}}{}%
\f@nch@ifundefined{chapter}%
 {\def\sectionmark##1{\markboth{\MakeUppercase{\ifnum \c@secnumdepth>\z@
        \thesection\hskip 1em\relax
      \fi ##1}}{}}%
  \def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
    \thesubsection\hskip 1em\relax \fi ##1}}}%
 {\def\chaptermark##1{\markboth {\MakeUppercase{\ifnum
      \c@secnumdepth>\m@ne \@chapapp\ \thechapter. \ \fi ##1}}{}}%
\def\sectionmark##1{\markright{\MakeUppercase{\ifnum \c@secnumdepth >\z@
      \thesection. \ \fi ##1}}}%
}
\ps@@fancy
\gdef\ps@fancy{\@fancyplainfalse\ps@@fancy}%
\ifdim\headwidth<0sp
    \global\advance\headwidth123456789sp\global\advance\headwidth\textwidth
\fi}
\def\ps@fancyplain{\ps@fancy \let\ps@plain\ps@plain@fancy}
\def\ps@plain@fancy{\@fancyplaintrue\ps@@fancy}
\let\ps@@empty\ps@empty
\def\ps@@fancy{%
  \ps@@empty
  \def\@mkboth{\protect\markboth}%
  \def\@oddhead{\f@nch@head\f@nch@Oolh\f@nch@olh\f@nch@och\f@nch@orh\f@nch@Oorh}%
  \def\@oddfoot{\f@nch@foot\f@nch@Oolf\f@nch@olf\f@nch@ocf\f@nch@orf\f@nch@Oorf}%
  \def\@evenhead{\f@nch@head\f@nch@Oelh\f@nch@elh\f@nch@ech\f@nch@erh\f@nch@Oerh}%
  \def\@evenfoot{\f@nch@foot\f@nch@Oelf\f@nch@elf\f@nch@ecf\f@nch@erf\f@nch@Oerf}%
}
\def\f@nch@Oolh{\if@reversemargin\hss\else\relax\fi}
\def\f@nch@Oorh{\if@reversemargin\relax\else\hss\fi}
\let\f@nch@Oelh\f@nch@Oorh
\let\f@nch@Oerh\f@nch@Oolh
\let\f@nch@Oolf\f@nch@Oolh
\let\f@nch@Oorf\f@nch@Oorh
\let\f@nch@Oelf\f@nch@Oelh
\let\f@nch@Oerf\f@nch@Oerh
\def\f@nch@offsolh{\headwidth=\textwidth\advance\headwidth\f@nch@O@olh
                   \advance\headwidth\f@nch@O@orh\hskip-\f@nch@O@olh}
\def\f@nch@offselh{\headwidth=\textwidth\advance\headwidth\f@nch@O@elh
                   \advance\headwidth\f@nch@O@erh\hskip-\f@nch@O@elh}
\def\f@nch@offsolf{\headwidth=\textwidth\advance\headwidth\f@nch@O@olf
                   \advance\headwidth\f@nch@O@orf\hskip-\f@nch@O@olf}
\def\f@nch@offself{\headwidth=\textwidth\advance\headwidth\f@nch@O@elf
                   \advance\headwidth\f@nch@O@erf\hskip-\f@nch@O@elf}
\def\f@nch@setoffs{%
  \f@nch@gbl\let\headwidth\f@nch@headwidth
  \f@nch@gbl\let\f@nch@Oolh\f@nch@offsolh
  \f@nch@gbl\let\f@nch@Oelh\f@nch@offselh \f@nch@gbl\let\f@nch@Oorh\hss
  \f@nch@gbl\let\f@nch@Oerh\hss \f@nch@gbl\let\f@nch@Oolf\f@nch@offsolf
  \f@nch@gbl\let\f@nch@Oelf\f@nch@offself \f@nch@gbl\let\f@nch@Oorf\hss
  \f@nch@gbl\let\f@nch@Oerf\hss
}
\newif\iff@nch@footnote
\AtBeginDocument{%
  \let\latex@makecol\@makecol
  \def\@makecol{\ifvoid\footins\f@nch@footnotefalse\else\f@nch@footnotetrue\fi
    \let\topfloat\@toplist\let\botfloat\@botlist\latex@makecol}%
}
\newcommand\iftopfloat[2]{\ifx\topfloat\empty #2\else #1\fi}%
\newcommand\ifbotfloat[2]{\ifx\botfloat\empty #2\else #1\fi}%
\newcommand\iffloatpage[2]{\if@fcolmade #1\else #2\fi}%
\newcommand\iffootnote[2]{\iff@nch@footnote #1\else #2\fi}%
\newcommand{\fancypagestyle}[2]{%
  \@namedef{ps@#1}{\let\f@nch@gbl\relax#2\relax\ps@fancy}}
\endinput
%%
%% End of file `fancyhdr.sty'.

雰囲気でlatexを触っているのでstyファイルだのclsファイルってのが何のファイルかイマイチ分かっとらん. なんか間違いがあればコメントで教えてください.

参考文献

zenn.dev

osksn2.hep.sci.osaka-u.ac.jp

tex.stackexchange.com

https://www.y-misc.org/tex/template/twocolumn.tex