此文由 Mix Space 同步更新至 xLog
為獲得最佳瀏覽體驗,建議訪問原始鏈接
https://www.do1e.cn/posts/others/nju-ipv4
動機#
動機來自於搭建的網頁。由於校內和公網都有搭建,一方面為了降低伺服器流量,另一方面也可以為校內用戶提供更快的速度,因此想獲取南大的IP地址範圍,在nginx裡配置302重定向。
十分討厭微信和 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 重定向到校內網址就行。這樣給別人鏈接的時候就只要給一個了。妙啊!
雖然在 ITSC 中詢問了南大所有的 IP 地址範圍,但他們不給。/_ \
舊版數據#
舊版數據來自於 https://github.com/FW27623/qqwry ,最新數據更新於**2024年09月25日**,但由於[純真IP](https://cz88.net/geo-public)走向商業化,需要申請才行。但是你怎麼知道我申請成功了?因此有了日更數據。
通過自行搜索發現純真 IP給的 IPv4 地址位置還挺準的,但要獲取全部數據庫還挺麻煩,總不能每次有用戶先請求一個 API 獲取用戶位置再返回吧。
最終還是找到了一份 2024 年 09 月 25 日的數據庫,並解析出了所有地址為 “南京大學” 的 IPv4 段,這裡分享給各位。
數據更新於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 為,所屬區域:,
。start | end | mask | mask_len | region |
---|
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