この文は Mix Space によって xLog に同期更新されています
最適なブラウジング体験を得るために、元のリンクを訪れることをお勧めします
https://www.do1e.cn/posts/others/nju-ipv4
動機#
動機は構築したウェブページから来ています。校内と公衆ネットワークの両方に構築されているため、一方ではサーバーのトラフィックを減らし、もう一方では校内ユーザーにより速い速度を提供するため、南大のIPアドレス範囲を取得し、nginxで302リダイレクトを設定したいと考えました。
私は、WeChat や QQ でファイルを送信する際に、すべてのデバイスでダウンロードされる行為が非常に嫌いで、特にスマートフォンでは保存パスを見つけるのが難しいです。
そのため、私はvastsa/FileCodeBoxを使用して、一時的なファイル分析サイトを構築しました。
その中で https://filebox.nju.do1e.cn は私の学校内の小型サーバー上に構築されているため、南大でのみアクセス可能です。一方、https://filebox.cloud.do1e.cn はrapiz1/ratholeを使用して、シンガポールの VPS にマッピングされており、公衆ネットワークからのアクセスが便利です。
また、私はalistを使用して、ファイル共有サイトも構築しました。
校内: https://alist.nju.do1e.cn
公衆: https://alist.do1e.cn
これはポートマッピングを使用していません。前者は私の学校内のサーバーのハードディスクにファイルを置き、後者は OneDrive に置いてサーバーの帯域幅の圧力を軽減しています。OneDrive とサーバーのハードディスク上のファイルは毎日定期的に同期されます。
しかし、もし私が公衆リンクだけを他の人に送った場合、校内の人々はギガビットの校内ネットワークの速度を享受できず、私は毎回リンクを送る前に相手が校内か校外かを尋ねることができません。
そのため、nginx でソース IP アドレスが校内にあるかどうかを判断し、302 リダイレクトを校内の URL に設定することを考えました。これにより、他の人にリンクを送るときは一つだけで済みます。素晴らしいですね!
ITSC で南大のすべての IP アドレス範囲を尋ねましたが、彼らは教えてくれませんでした。/_ \
旧版データ#
旧版データは https://github.com/FW27623/qqwry から取得されており、最新のデータは**2024年09月25日**に更新されましたが、[純真IP](https://cz88.net/geo-public)は商業化に向かっており、申請が必要です。しかし、私が申請に成功したかどうかはどうやってわかるのでしょうか?そのため、日々の更新データが必要になりました。
自分で検索したところ、純真 IPが提供する IPv4 アドレスの位置情報はかなり正確ですが、全データベースを取得するのは面倒です。ユーザーが最初に API をリクエストして位置情報を取得してから返すわけにはいきません。
最終的に 2024 年 09 月 25 日のデータベースを見つけ、「南京大学」としてすべてのアドレスを解析しましたので、ここで皆さんと共有します。
データは2024 年 09 月 25 日に更新されており、完全に正確であることは保証できませんので、慎重に使用してください。
58.192.32.0 - 58.192.55.255
58.193.224.0 - 58.193.255.255
58.240.127.3 - 58.240.127.3
114.212.0.0 - 114.212.255.255
180.209.0.0 - 180.209.15.255
202.38.2.0 - 202.38.3.255
202.119.32.0 - 202.119.63.255
210.28.128.0 - 210.28.143.255
210.29.240.0 - 210.29.255.255
218.94.9.35 - 218.94.9.38
218.94.36.211 - 218.94.36.211
218.94.142.6 - 218.94.142.6
219.219.112.0 - 219.219.127.255
221.226.2.0 - 221.226.3.25
最終的に nginx の設定は以下のようになります:
|| もっと優雅な書き方があるかもしれませんが、直接 GPT が生成したものは魅力的ではありませんか?||
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name filebox.cloud.do1e.cn;
location / {
set $nju_ip 0;
if ($remote_addr ~ ^58\.192\.(3[2-9]|4[0-9]|5[0-5])\.) {
set $nju_ip 1;
}
if ($remote_addr ~ ^58\.193\.(22[4-9]|2[3-4][0-9]|25[0-5])\.) {
set $nju_ip 1;
}
if ($remote_addr = 58.240.127.3) {
set $nju_ip 1;
}
if ($remote_addr ~ ^114\.212\.) {
set $nju_ip 1;
}
if ($remote_addr ~ ^180\.209\.(0|1[0-5])\.) {
set $nju_ip 1;
}
if ($remote_addr ~ ^202\.38\.(2|3)\.) {
set $nju_ip 1;
}
if ($remote_addr ~ ^202\.119\.(3[2-9]|[4-5][0-9]|6[0-3])\.) {
set $nju_ip 1;
}
if ($remote_addr ~ ^210\.28\.(12[8-9]|1[3-4][0-9])\.) {
set $nju_ip 1;
}
if ($remote_addr ~ ^210\.29\.(24[0-9]|25[0-5])\.) {
set $nju_ip 1;
}
if ($remote_addr ~ ^218\.94\.9\.(3[5-8])$) {
set $nju_ip 1;
}
if ($remote_addr = 218.94.36.211) {
set $nju_ip 1;
}
if ($remote_addr = 218.94.142.6) {
set $nju_ip 1;
}
if ($remote_addr ~ ^219\.219\.(11[2-9]|12[0-7])\.) {
set $nju_ip 1;
}
if ($remote_addr ~ ^221\.226\.2\.(0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25)$) {
set $nju_ip 1;
}
if ($nju_ip) {
return 302 https://filebox.nju.do1e.cn$request_uri;
}
proxy_pass http://127.0.0.1:3465;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
日更データ#
純真 IPの許可を得たため、ここで毎日 IP 範囲を更新できます(もちろん、純真は日々更新ではありません。更新日を下に記載します)。
|| 毎日更新する必要はないかもしれませんが、どうせ自動化されているので、自動化が大好きです。||
データはに更新されており、完全に正確であることは保証できませんので、慎重に使用してください。
あなたの IP は、所属地域:、
。開始 | 終了 | マスク | マスク長 | 地域 |
---|
IP アドレス位置データは純真 CZ88の提供によるものです
用法#
以下の設定ファイルは手動更新用で、最新のデータベースの日付は 2024 年 12 月 18 日です
nginx 分流#
ソースアドレスを判断し、南大 IP に属する場合は、南大内のサーバーにリダイレクトします。
/etc/nginx/nginx.conf
に geo を定義します:
http {
...
geo $njuip {
default 0;
58.192.32.0/20 1;
58.192.48.0/21 1;
58.193.224.0/19 1;
58.240.127.3 1;
114.212.0.0/16 1;
180.209.0.0/20 1;
202.38.2.0/23 1;
202.119.32.0/19 1;
210.28.128.0/20 1;
210.29.240.0/20 1;
218.94.9.35 1;
218.94.9.36/31 1;
218.94.9.38 1;
218.94.36.211 1;
218.94.142.6 1;
219.219.112.0/20 1;
221.226.2.0/25 1;
221.226.2.128/27 1;
221.226.2.160/28 1;
221.226.2.176/29 1;
221.226.2.184/31 1;
221.226.2.186 1;
221.226.2.187 1;
221.226.2.188/30 1;
221.226.2.192/26 1;
221.226.3.0/28 1;
221.226.3.16/29 1;
221.226.3.24/31 1;
221.226.3.27 1;
221.226.3.28/30 1;
221.226.3.32/27 1;
221.226.3.64/26 1;
221.226.3.128/25 1;
}
...
}
リダイレクトが必要なserver
で使用します:
# filecodebox
server {
...
server_name example.com;
location / {
if ($njuip) {
return 302 https://nju.example.com$request_uri;
}
...
}
}
openvpn 分流#
アクセスする目的地が南大のアドレスであるかどうかを判断し、南大のアドレスのリソースにアクセスする場合のみ VPN を使用します。
既存の.ovpn
ファイルのdev tun
の下に以下の内容を追加し、# コメントを削除します。
route-nopull # サーバーから配信されたルートを使用しない
route 10.8.0.0 255.255.0.0 vpn_gateway # ここはopenvpnクライアントのネットワークセグメントに変更する必要があります
route 172.16.1.0 255.255.255.0 vpn_gateway
route 58.192.32.0 255.255.240.0 vpn_gateway
route 58.192.48.0 255.255.248.0 vpn_gateway
route 58.193.224.0 255.255.224.0 vpn_gateway
route 58.240.127.3 255.255.255.255 vpn_gateway
route 114.212.0.0 255.255.0.0 vpn_gateway
route 180.209.0.0 255.255.240.0 vpn_gateway
route 202.38.2.0 255.255.254.0 vpn_gateway
route 202.119.32.0 255.255.224.0 vpn_gateway
route 210.28.128.0 255.255.240.0 vpn_gateway
route 210.29.240.0 255.255.240.0 vpn_gateway
route 218.94.9.35 255.255.255.255 vpn_gateway
route 218.94.9.36 255.255.255.254 vpn_gateway
route 218.94.9.38 255.255.255.255 vpn_gateway
route 218.94.36.211 255.255.255.255 vpn_gateway
route 218.94.142.6 255.255.255.255 vpn_gateway
route 219.219.112.0 255.255.240.0 vpn_gateway
route 221.226.2.0 255.255.255.128 vpn_gateway
route 221.226.2.128 255.255.255.224 vpn_gateway
route 221.226.2.160 255.255.255.240 vpn_gateway
route 221.226.2.176 255.255.255.248 vpn_gateway
route 221.226.2.184 255.255.255.254 vpn_gateway
route 221.226.2.186 255.255.255.255 vpn_gateway
route 221.226.2.187 255.255.255.255 vpn_gateway
route 221.226.2.188 255.255.255.252 vpn_gateway
route 221.226.2.192 255.255.255.192 vpn_gateway
route 221.226.3.0 255.255.255.240 vpn_gateway
route 221.226.3.16 255.255.255.248 vpn_gateway
route 221.226.3.24 255.255.255.254 vpn_gateway
route 221.226.3.27 255.255.255.255 vpn_gateway
route 221.226.3.28 255.255.255.252 vpn_gateway
route 221.226.3.32 255.255.255.224 vpn_gateway
route 221.226.3.64 255.255.255.192 vpn_gateway
route 221.226.3.128 255.255.255.128 vpn_gateway