Site2site_vpn2

事始め site2site routingができるようになり、vpn_clientのネットワーク内のサーバとvpn_server間で通信ができるようになったわけだが。 今回、新たにもう一つvpn_clientをつなぎ、新しいローカルネットワークをこのVPNネットワークに参加させようとしたわけだ。 しかしこれがうまくいかない。 環境の整理 ネットワークA : 100.64.0.0/22 ネットワークB : 192.168.1.0/24 で、以下のような設定をvpn_serverに書き込むわけです。 port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh.pem crl-verify crl.pem ifconfig-pool-persist ipp.txt server 10.8.0.0 255.255.255.0 # client側から通信させたい、server側のLanセグメントを指定 push "redirect-gateway def1 bypass-dhcp" push "route 10.8.0.0 255.255.255.0" push "dhcp-option DNS 8.8.8.8" # server側から通信させたい、client側のlanセグメントを指定 client-config-dir /etc/openvpn/ccd route 100.64.0.0 255.255.252.0 route 192.168.3.0 255.255.255.0 #fragment 1400 #mssfix tun-mtu 1400 client-to-client keepalive 10 120 comp-lzo user nobody group nogroup persist-key persist-tun status /var/log/openvpn-status.log log /var/log/openvpn.log log-append /var/log/openvpn.log verb 3 duplicate-cn これをやればA -> vpn_server B -> vpn_serverにつながると思っていた。 ...

February 22, 2025 · 6 min · 1073 words · Me

Port_forwarding_using_iptables

事始め openVPN + nginxを使うことでhttpリクエストをリバースプロキシして自宅ネットワークから配信することはできるようになった。 しかしこれあくまでもL7レイヤーの話であり、http以外は無理だという話だ。 例えば、kafkaのトピックにデータを登録するにはhttpではなく独自のプロトコルを使う必要がある。つまり、nginxではだめだということ。 どうするかというと、L3レイヤーでトラフィックの宛先を変えてあげる必要がある。 関連 ovpnを使ってsite2site routing iptalbesを使ってポートフォワーディングする方法 # 10001番ポートのトラフィックを 100.64.1.61:10001 に転送 iptables -t nat -A PREROUTING -p tcp --dport 10001 -j DNAT --to-destination 100.64.1.61:10001 # フォワードを許可 iptables -A FORWARD -p tcp -d 100.64.1.61 --dport 10001 -j ACCEPT # 外部に返すためのMASQUERADE(オプション) iptables -t nat -A POSTROUTING -d 100.64.1.61 -p tcp --dport 10001 -j MASQUERADE という感じですね。 今更だけどopenvpnがフリーソフトなのって普通にやばい こちら

February 19, 2025 · 1 min · 59 words · Me

インターネット上でGSLBを展開する方法

GSLBを自前で持つ方法 はい、まずインターネット上でドメインを持つ必要がありますよね。 ドメインの取得は、icannに登録された事業者しかできないんですよね。 だから、完全に自前は厳しいです。 ってことでいつも通りムームドメインとかでドメインを取得する必要がありますね。 で、このムームードメイン上でnsレコードを張って、その実態を自分のサーバにすればいいって話なんですよ。そうです。そこです。 そうすれば最終的にAレコードを張るのは自分で管理しているサーバになります。レコードを返すのも自分のサーバになるわけですね。 素晴らしいです。 nsレコードを張る方法として、二つあるんです。(おそらく) サブドメインとしてnsレコードを張る方法と、 そのドメインすべてにnsレコードを張る方法。 後者は、「取得したドメインで使用する ※上級者向け」ってところでやる必要がありそう。 ちなみに、完全に理解してしまったことが一つある。 dnsを登録すると、おそらく必ずnsレコードも登録される。 digではデフォルトでaレコードしか返さないようになっているが、例えばnsをつけるとnsレコードを返すようになります。 root@x162-43-53-234:~/MyFreshWebsite# dig ns ingenboy.com ; <<>> DiG 9.18.28-0ubuntu0.24.04.1-Ubuntu <<>> ns ingenboy.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15003 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;ingenboy.com. IN NS ;; ANSWER SECTION: ingenboy.com. 3600 IN NS dns01.muumuu-domain.com. ingenboy.com. 3600 IN NS dns02.muumuu-domain.com. ;; Query time: 20 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP) ;; WHEN: Wed Jan 29 16:04:35 JST 2025 ;; MSG SIZE rcvd: 95 こんな感じです。これがムームードメインになっていますね??はい、そうですね。 ...

January 29, 2025 · 8 min · 1664 words · Me

How_to_have_multiple_services_with_multiple_origin_on_a_single_frontend_proxy

事始め 会社ではL7プロキシの運用・開発をしている。 複数のEP(ドメイン)を持っている。 複数のドメインをひとつのL7プロキシ(単一のIP)でさばいている。 さて、これはいったいどの様に実現しているのか?というのが今回の議題。 IPアドレスはDNSによって単一のドメインと紐づけられる。と自分は認識していたが、これが誤りだった。 そして、自分は、会社に入るまでホストヘッダーという概念を全く分かっていなかった。 HTTPにはホストヘッダーというものがあり、これによって単一IP上に複数のドメインを保持することができるようになる。 そして、ポイントはやはり、HTTPはL7レイヤーであり、IPはL3レイヤーであるというところに落ち着くと思う。 前提 DNSでのIPアドレスとドメインの紐づけは一対一ではなく、一対多であった。ここがすごく大事なところでした。 そして、自分はホストヘッダーについて理解していなかった。 nginxを使ってバーチャルサーバを立てる chatgptから 単一の物理サーバー上で複数のウェブサイトやアプリケーションをホストするために使用される機能です。それぞれのバーチャルサーバーは、異なるドメイン名やサブドメインに対応して、個別に設定されたリソース(例えばウェブページやアプリケーションのファイル、SSL証明書、ログファイルなど)にアクセスを提供します。 Nginxでは、これらのバーチャルサーバーを「サーバーブロック」として設定ファイルに記述します。以下は、Nginxでのバーチャルサーバー設定の基本的な例です: server { listen 80; server_name example.com www.example.com; location / { root /var/www/example.com/html; index index.html index.htm; } error_page 404 /404.html; location = /404.html { root /var/www/example.com/html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/example.com/html; } } ホストヘッダーの役割 chatgptより HTTPのホストヘッダーは、HTTPリクエストを送信する際に非常に重要な役割を果たします。このヘッダーは、クライアントがリクエストを送信する際に、どのホスト(ドメイン名またはIPアドレス)とポートに対してリクエストが意図されているかを指定するために使用されます。特に、一つのサーバーが複数のドメインをホスティングしている場合(仮想ホスティング)、ホストヘッダーがないとサーバーはリクエストがどのウェブサイトに対してなのか判断できません。 HTTP/1.1ではホストヘッダーは必須とされています。これは、HTTP/1.0と異なり、サーバーが複数のドメインをホストしている状況が一般的になったためです。リクエストにホストヘッダーが含まれていない場合、サーバーは400 Bad Requestのエラーを返すことが多いです。 DNSのAレコード 複数のサブドメインが同じサーバーのリソースを指す場合、それら全てに同じIPアドレスを割り当てることが一般的です。 例えば、次のように設定することができます: www.example.com → 192.0.2.1 mail.example.com → 192.0.2.1 ftp.example.com → 192.0.2.1 これらのサブドメイン全てに同じAレコードのIPアドレス(192.0.2.1)を指定することで、一つのサーバーが異なるサービス(ウェブ、メール、FTPなど)を提供することができます。これは特に、ホスティングサービスが複数のウェブサイトを単一の物理サーバーで管理する場合などに便利です。また、メンテナンスやアップグレードが必要な場合にも、一箇所で変更を行うだけで済むため効率的です。 ...

December 31, 2024 · 1 min · 96 words · Me

Comments_on_real_world_http

Real world httpに書いてあることを殴り書きしていきます 開発環境 の前に、lanのipアドレスを書いておきたいです。 100.64.1.27 : alpha 100.64.1.61 : evn 100.64.1.48 : delta (K8SクラスタへのGWです) deltaの役割 前に、DHCPサーバとルータを作成する記事を書いた。 こちらの記事だね。 で、deltaはDHCPサーバ兼ルータという立ち位置です。

November 11, 2024 · 1 min · 19 words · Me

About_LB

LBのあれこれ 参考文献 https://qiita.com/masaozi3/items/838060d7339aef01bc2e

September 8, 2024 · 1 min · 3 words · Me

Comments_on_tcp_ip_network_commands

TCP/IP & ネットワークコマンド入門の大事なところをメモっていく ncコマンドについて 個人的に、最近ncコマンド使う機会が増えてきて、この本でも結構語られているので、使い方くらいはメモっておきたい ncコマンドはTCPもしくはUDPのコネクションを貼ってくれるコマンド。送信するビット列は完全に自分で選ぶことができる。 以下のコマンドでサーバをTCPで起動できる。 -l はlistenの略で、リッスンしている、つまりサーバです nc -l 55555 以下のコマンドで、ncサーバとコネクションを貼ることができる nc <ip addr> <port> よくあるncコマンドの使用例 使用例としては、あるサービスのクライアントがどんな感じでbit列を送ってくるのかをサーバ側から可視化するときに使うイメージが強いな。 例えばUDP通信の代表例であるDNS resolutionね。こんな感じです。 ローカルホストで以下のncサーバを立てる # nc -u -l 1053 > query_packet.txt こいつは、1053万ポートでUDP通信を待ち受けている。で、受け取ったパケットをquery_packet.txtにリダイレクトしている。 このサーバに対して、以下のdigコマンドを送ることで、DNSクライアントがどのようなパケットを送信しているかがわかる。 dig +retry=0 -p 1053 @127.0.0.1 +noedns google.com ここからは、追加での遊びですが、こんな感じで、ncサーバで受け取ったパケットを今度はncクライアントに流し込んで読み込ませることもできると。おもろいっすね。 nc -u 8.8.8.8 53 < query_packet.txt > response_packet.txt ちなみに、以下のコマンドでhexでパケットの中身が見られるようになります。 hexdump -C query_packet.txt sshクライアントの動きをncサーバをたててみてみる nc -l 10022 > clien_packet.txt ssh localhost -p 10022 ray@delta:~$ hexdump -C clien_packet.txt 00000000 53 53 48 2d 32 2e 30 2d 4f 70 65 6e 53 53 48 5f |SSH-2.0-OpenSSH_| 00000010 38 2e 39 70 31 20 55 62 75 6e 74 75 2d 33 75 62 |8.9p1 Ubuntu-3ub| 00000020 75 6e 74 75 30 2e 31 30 0d 0a |untu0.10..| 0000002a みたいな感じで見られてりして、マジで面白いわけですね。はい。ってことで、ncコマンドはガチで便利だし、知っておいた方がいいって話です。 ...

August 18, 2024 · 1 min · 200 words · Me

Learn_k8s_4

大人気K8Sシリーズ。 今回でなんと第4回目 まずは、過去の振り返りをやっていきましょう。 振り返り 過去の奮闘記録。 構築日記その1 構築日記その2 構築日記その3 第1回目と第二回目はインフラ構築を頑張っていた感じです。引っ越しとかあって、K8Sの勉強は飛び飛びになっている感じでね。 そして、第3回にして、やっと色々とインフラ構築をスムーズにできて、さまざまな概念についても理解できてきた、という感じです。 はい、サービスね。これが大事な概念だった。POD間で通信をするためには、Serviceが必要だったのではないか?とね。ServiceでPODをcoreDNSに登録することができる。 そして、基本的に一つのサービス内での通信はしない。サービス間の通信はあるが。なので、docker composeのようにはいかないという話だな。 そして、今回の第4回目では、K8Sの使い方をもっと詳しく理解していきましょう、という回になっています。 具体的には、「つくって、こわして、直して学ぶkubernetes入門」という本に従って色々と進めていきたいと思っています。はい。 そして、第5回目に、私が開発した競馬システムをついにデプロイする、という感じに持っていきたいと思っています。よろしくお願いします。 まずは、harborにログインしておく の前にロボットアカウントを作らないといけない感じ? docker login 100.64.1.61:20080 -u username -p password server nerdctlを使っているので、buildを使うためにbuildkitをインストールする必要がある。 しかも、buildkitdというのを走らせておく必要がある。 テストでgoで簡易サーバを作って走らせる package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/",func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w,"Hellow, wordl!") }) log.Println("starting server on port 8880") err := http.ListenAndServe(":8880", nil) if err != nil { log.Fatal(err) } } dockerfile FROM golang:1.23 AS builder WORKDIR /app COPY . . ENV CGO_ENABLED=0 RUN go mod tidy RUN go build -o hello . FROM scratch COPY --from=builder /app/hello /hello ENTRYPOINT ["/hello"] go.modを入れるのを忘れずに。 go mod init github.com/hogehoge とかで問題ない。 ...

August 18, 2024 · 11 min · 2284 words · Me

Master_DNS

DNSはrequestとresponseが同じ系形式のUDPパケットでやり取りされるプロトコルである。 で、実はdigがdnsプロトコルのパケット内容を忠実に再現しているのです。だから、これマスターするDNSがほぼ分かったということになります。 関連ドキュメント ハンズオンの ハンズオンを紹介しているやつ rfsの読み方を説明している資料 ルートDNSの場所 digコマンドでの遊び方 digでの遊び方 dnsの全体像 dig関連 digの基本的なオプション +noedns : tcpで問い合わせ +norec : 非再起問い合わせを強制する。 qr : queryレスポンス rd : recursion desired : 再起問い合わせ要求。(Set by the sender of the request if the server should attempt to resolve the query recursively if it does not have an answer readily available.) ra : recursion available : 再起問い合わせ対応が可能か?(Set by the server to indicate whether or not recursive queries are allowed.) 基本的に、名前解決と言ったら8.8.8.8などのDNSキャッシュサーバが再起問い合わが実行して返してくれる。 しかし、権威DNSは再起問い合わせができないからね。 rdがついてもraがなかったら非再起問い合わせができないということになります。いくつかみてみましょうか? いくつかDNSレコードを送ってみましょうか? dig @1.1.1.1 +norec blog.ingenboy.com ; <<>> DiG 9.18.28-0ubuntu0.24.04.1-Ubuntu <<>> @1.1.1.1 +norec blog.ingenboy.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 21079 ;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;blog.ingenboy.com. IN A ;; Query time: 1 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP) ;; WHEN: Thu Aug 22 09:05:47 JST 2024 ;; MSG SIZE rcvd: 46 +norecをつけたのでDNSサーバは非再起問い合わせで名前解決ができません。そのため、answer sectionがないわけですね。 つまり、名前解決できなかったわけです。それにもかかわらずGot answerって書いているのはタチが悪いよね。 ...

August 4, 2024 · 4 min · 757 words · Me

リンクレイヤーで使われるネットワークコマンドをまとめる

リンクレイヤー MACアドレスですねー。実際に通信をする相手を指定するときはMACアドレスを指定しますね。 Network deviceがMACアドレスを持っていて、OSはIPとMACの対応表をARPテーブルに持っているんですね。 IPからMACを知ることをARP (address resolution protocol) って言いますね。 脆弱性 正直、ARPは脆弱性まみれに見える。 というのも完全に性善説に基づいているから。 「xxのIPアドレスを持っている機器はどこにありますかーー??」に対して、「おれですー」ってやってくるやつが、本当にそうだと信じてしまう。 だからARP spoofingが簡単にできてしまうということだ。ちょっと実験してみたいよね。 kickthemout LAN内のほかのノードを締め出すツール 実験していましょうか。 sudo apt install git git clone https://github.com/k4m4/kickthemout.git sudo apt install nmap cd kickthemout sudo apt install pip sudo -H pip3 install -r requirements.txt arpspoof こっちの方が簡単だね。 arpspoof

July 29, 2024 · 1 min · 44 words · Me