linux配置本地tomcat應用80連接埠轉寄 情境:本地部署tomcat到8080連接埠,並期望本地訪問80連接埠來訪問本地tomcat。 結論:使用linux下的iptables工具實現連接埠轉寄功能。 具體為 現取得root許可權執行iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-port 8080目前在重啟前均生效。要想永久生效,需要繼續執行(ubuntu環境):iptables-save > /etc/iptables.rules建立一個bash指令碼 [html] #!/bin/bash iptables-restore < /etc/iptables.rules 儲存到/etc/network/if-pre-up.d/目錄下結束!BTW:如果是配置外部伺服器,則把第2步換為執行iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080實驗過程:實驗過程主要集中在上述第2步中該添加何種iptables規則。 取得root許可權後,單獨執行各個操作: iptables -t nat -I OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080 結果:訪問本地localhost正常轉寄,訪問外部網路全部被重新導向到本地localhost:8080原因: 本機訪問請求時,本地進程產生的報文將進入OUTPUT鏈,因為當前請求包的連接埠是80,於是重新導向道8080,注意是所有資料包。 iptables -t nat -I OUTPUT -p tcp -s 127.0.0.1 --dport 80 -j REDIRECT --to-port 8080結果:訪問本地localhost正常轉寄,訪問外部網路正常沒特殊處理原因:類似上例,但多了一個規則:需匹配資料包源地址-s 127.0.0.1。但實際上,訪問外部網路時實際資料包在經過這個鏈時的源地址是本機ip,而不是迴路ip(127.0.0.1),所以相當於本規則對訪問外部網路時無效。 iptables -t nat -I OUTPUT -p tcp -s 非迴路網卡ip --dport 80 -j REDIRECT --to-port 8080結果:訪問本地localhost無法轉寄,訪問外部網路全部被重新導向到本地localhost:8080原因:和上例類似,規則匹配了對外訪問的資料包,從而被重新導向。 iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-port 8080 結果:訪問本地localhost正常轉寄,訪問外部網路正常沒特殊處理原因:本地應用的ip被匹配上,所以訪問本地應用時,資料包將被重新導向道8080 iptables -t nat -I OUTPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 --dport 80 -j REDIRECT --to-port 8080結果:訪問本地localhost正常轉寄,訪問外部網路正常沒特殊處理原因:2,4操作的原因結合。 iptables -t nat -I PREROUTING -p tcp -s 127.0.0.1 -d 127.0.0.1 --dport 80 -j REDIRECT --to-port 8080結果:訪問本地localhost無法轉寄,訪問外部網路正常沒特殊處理原因:本地串連指的是在本機上,用 127.0.0.1 或者本機 IP 來訪問原生連接埠。本地串連的資料包不會通過網卡,而是由核心處理後直接發給本地進程。這種資料包在 iptables 中只經過 OUTPUT 鏈,而不會經過 PREROUTING 鏈.