--- tags: 日誌 --- # 一個作 port forwarding 的坑 ## 背景 我的 public ip 是 140.113.x.x,然後我的網路拓撲長這樣: (Server: 192.168.1.10)-(Router: 192.168.1.254)-(Macbook: 192.168.1.20) 我想要在 Server 上架設 web 服務,需開啟 80 port 和 443 port。 ## 步驟 我建了一條防火牆規則: ``` chain=dstnat action=dst-nat to-addresses=192.168.1.10 protocol=tcp dst-address=140.113.x.x dst-port=22,80,443 ``` ## 問題 之後我發現從手機(4G網路)上去訪問,的確有成功作 port forwarding,但我從 Macbook(LAN)去訪問,卻只得到連線逾時。 在 de 了很久的 bug 之後,我找到了問題: 當筆電從內網訪問時候,他的封包長這樣: src-ip: 192.168.1.20 dst-ip: 140.113.x.x 之後丟往 default gateway,留過 router,會作 NAT: src-ip: 192.168.1.20 dst-ip: 192.168.1.10 然後 router 會把他轉發給 server,server 會回傳封包: src-ip: 192.168.1.10 dst-ip: 192.168.1.20 由於是在 LAN,可以視作 server 直接發封包給 macbook,不會作 NAT 或其他 rewrite。 因此 macbook 收到的封包就是長這樣,他發現 src-ip 不是它發送給的 140.113.x.x,因此封包就被 drop 了。 因此還需要再加一條 NAT 規則: ``` chain=srcnat action=src-nat to-addresses=192.168.1.254 protocol=tcp src-address=192.168.1.0/24 dst-address=192.168.1.10 dst-port=22,80,443 ``` 將所有的 src-ip 改寫成 router,強迫讓所有封包都經由 router 作 NAT 和 forwarding。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up