看板 Linux 關於我們 聯絡資訊
目前架構是 PC3 ----- 小烏龜----switch-----PC1 Internet | 192.168.1.254 (撥接,NAT) | eth0 ppp0 PC2 192.168.1.250(撥接) eth0 ppp0 PC1 和 PC2 系統都是 centos PC1 用 @ip.hinet.net 撥接、然後負責 NAT 和 DHCP PC2 用 @hinet.net 撥接 現在 PC3 要透過 PC1 的 9999 port 的 IP 連進 PC2 的 port 3306 我在 PC1 設 iptables ,把 port 9999 都導到 PC2 的 port 3306 ,但是一直無法連線 iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 9999 -j DNAT --to-destination 192.168.1.250:3306 請問有那個地方該修改的嗎? 個人思考應該是和 PC2 也有撥接的關係、但不知道該怎麼改 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.33.55.125 zhucc:轉錄至看板 Network 10/22 20:35
paar:這是 PC2 default gateway 的問題 10/22 21:29
所以請問有解嗎? 因為PC2有自行對外連線的需求,所以沒辦法關 pppoe 連線
yvb:大概兩種解法.[1]PC1轉送PC2時做SNAT,但PC2無法得知真正來源. 10/22 22:05
yvb:[2]PC2對特定port用policy route,但外面無法直接連PC2該port. 10/22 22:08
rickieyang:policy route 應該沒用, 只能 SNAT. 10/22 23:09
rickieyang:PC2看到同內網連線就直接回, 但PC3不認帳, drop 掉... 10/22 23:10
rickieyang:等等...... PC3 是內網吧?? @@ 10/22 23:11
PC3 是指外網,抱歉沒說清楚 另外可以單就 PC1到PC2 轉送時做 SNAT 嗎? 指令該怎麼下,因為我對這邊實在不是很熟悉
rellik:-i ppp0 你的 interface 是 ppp0 嗎? 能否貼個 ifconfig 10/22 23:59
rellik:另外貼一下 iptables-save 10/23 00:03
rellik:看到最底下PC2也撥接? 既然和PC1是同網段怎麼不是把default 10/23 00:06
rellik:gateway 設定在 PC1 呢? 10/23 00:07
是 ppp0 沒錯 然後因為有跑某些程式,所以 dafault gateway 沒辦法設在 PC1 iptables-save *nat :PREROUTING ACCEPT [128:15380] :POSTROUTING ACCEPT [3407:204420] :OUTPUT ACCEPT [6799:406670] -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE -A POSTROUTING -o ppp0 -j MASQUERADE COMMIT *filter :INPUT DROP [4625:1814415] :FORWARD ACCEPT [3493355:2820439735] :OUTPUT ACCEPT [4207862:890968157] -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED -j ACCEPT -A INPUT -m state --state ESTABLISHED -j ACCEPT -A INPUT -i ppp0 -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -i ppp0 -p tcp -m tcp --dport 8080 -j ACCEPT -A INPUT -i eth0 -j ACCEPT COMMIT ifconfig eth0 Link encap:Ethernet HWaddr 00:E0:81:2D:06:0C inet addr:192.168.1.254 Bcast:192.168.1.255 Mask:255.255.255.0 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 ppp0 Link encap:Point-to-Point Protocol inet addr:***.***.***.*** P-t-P:168.95.98.254 Mask:255.255.255.255
rellik:所以 PC2 因為有跑撥接的關係,192.168.1 的網段也是 nat 來 10/23 01:30
rellik:的嗎? 還是說是另外接網卡在 switch 上? 10/23 01:31
rellik:換個問法, PC1和 PC2 192.168.1的ip是可以互相ping有回應? 10/23 01:37
PC1 和 PC2 都有跑撥接 然後 192.168.1.0/24 是自訂的網段,可以互相 ping 沒問題 兩台機器都只有一張網卡而已
yvb:回四樓rick大, 看原po的iptables rule, 是從ppp0來的才DNAT, 10/23 13:16
yvb:不是內網,所以 policy route 不會不 work. 10/23 13:16
yvb:另外, 關於SNAT的部分, 在PC2只會看到是192.168.1.254連過來; 10/23 13:16
yvb:作法最好搭配 mangle table 及 fwmark 來做: 10/23 13:16
yvb:iptables -t mangle -A PREROUTING -i ppp0 -p tcp \ 10/23 13:17
yvb: --dport 9999 -j MARK --set-mark 0x1/0x1 ; 10/23 13:17
yvb:iptables -t nat -A PREROUTING -m mark --mark 0x1/0x1 \ 10/23 13:17
yvb: -j DNAT --to-destination 192.168.1.250:3306 ; 10/23 13:17
yvb:iptables -t nat -A POSTROUTING -d 192.168.1.250 \ 10/23 13:17
yvb: -m mark --mark 0x1/0x1 -j MASQUERADE ; 10/23 13:17
yvb:上面的 -j MASQUERADE 也可改為 10/23 13:18
yvb: -j SNAT --to-source 192.168.1.254 10/23 13:18
yvb:效果相同, 但用 -j MASQUERADE 較方便. 10/23 13:18
yvb:當然, -d 192.168.1.250 在這情況下改用 -o eth0 也可以. 10/23 13:18
yvb:若按上面的設定, 原 po 原來的那一筆 DNAT 就要拿掉. 10/23 13:21
yvb:其實 -d 192.168.1.250 或 -o eth0 不寫應該也 OK. 10/23 13:26
感謝 yvb 大的教學,上面指令做點小更動確定可以用 iptables -t mangle -A PREROUTING -i ppp0 -p tcp --dport 9999 \ -j MARK --set-mark 0x1/0x1 iptables -t nat -A PREROUTING -m mark --mark 0x1/0x1 -p tcp \ -j DNAT --to-destination 192.168.1.250:3306 iptables -t nat -A POSTROUTING -d 192.168.1.250 -m mark --mark 0x1/0x1 \ -j MASQUERADE ※ 編輯: zhucc 來自: 114.33.55.125 (10/23 14:17)
yvb:一時不查. 有設定 port (像上述 DNAT) 時就要加上 protocol. 10/23 16:24