Now that I had the DPI bypass tunnel working from university (previous chapter), I ran into a stupid problem: I couldn't SSH into my server through the tunnel because my home network and the university network used the same subnet.
The Problem
My home router was set to [OLD_SUBNET].0/24. My server was at [OLD_SUBNET].2. But [OLD_SUBNET].x is the most common LAN range in the world and the university uses it too.
So when I connected through the tunnel and tried to SSH to [OLD_SUBNET].2, my laptop got confused. Is that my home server? Or some random device on the university network? The operating system couldn't tell, and the packets went to the wrong place.
This is a well-known issue when running VPNs from different networks. If both sides use the same private IP range, routing breaks.
The Fix
Changed my entire home network to a subnet nobody uses: [NEW_SUBNET].0/24.
Why [NEW_SUBNET].x? The 10.0.0.0/8 block contains over 16 million possible subnets. No university, hotel, airport, or coffee shop is going to use [NEW_SUBNET].x specifically. Zero conflict risk.
I also considered 100.64.0.0/10 (the CGNAT range), but that's used by ISPs internally and since my ISP (TIM) likely uses it for their own NAT, it could have conflicted with my internet connection itself. Bad idea.
What I Changed
On the router:
- Router IP:
[OLD_SUBNET].1→[NEW_SUBNET].1 - DHCP range:
[NEW_SUBNET].100to[NEW_SUBNET].200 - Server DHCP reservation: Ethernet →
[NEW_SUBNET].2, Wi-Fi →[NEW_SUBNET].3 - Port forwarding: all rules updated to point to
[NEW_SUBNET].2
On the server: searched for every reference to the old IP and updated it:
grep -r "[OLD_SUBNET]" /usr/local/bin/
grep -r "[OLD_SUBNET]" /etc/openvpn/
grep -r "[OLD_SUBNET]" /etc/nginx/
grep -r "[OLD_SUBNET]" /etc/network/interfaces
On the client: updated all scripts, SSH, VPN, DPI bypass, to use [NEW_SUBNET].2 instead of [OLD_SUBNET].2.
The Result
Now when I'm at university with the DPI bypass tunnel active:
ssh mose@[NEW_SUBNET].2
Works perfectly. No confusion, no conflict. My home network is [NEW_SUBNET].x, the university is [OLD_SUBNET].x, and the routing table knows exactly where to send each packet.
A small change, but one of those things that would have driven me crazy every single time I tried to work remotely. Sometimes the boring infrastructure fixes are the most important ones.
What's Next
- V2Ray mobile client setup
- UPS (crash experiment still running)
- Containerization with Docker
- Self-hosted drive with NAS
- VPS reverse proxy
- Mail server
- Local LLM