Do1e

Do1e

github
email

南京大學IPv4地址範圍

此文由 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 為,所屬區域:

startendmaskmask_lenregion

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
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。