→ 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