Policy based Port routing (manual method) - XIYO/asuswrt-merlin.ng-kr GitHub Wiki
μκ°
μ΄ κ°μ΄λλ μ νμ ν¬νΈ (λλ MAC μ£Όμ) λΌμ°ν μ ꡬννλ λ° λμμ λ립λλ€. VPN (λλ WANμ ν΅ν ν¬νΈ μ νμ λΌμ°ν - λ‘컬 ISPλ₯Ό ν΅ν)
νμ μꡬ μ¬ν
- Asuswrt-Merlin νΈν ARM κΈ°λ° λΌμ°ν° λ° Asuswrt-Merlin v380.xx μ΄μ
- JFFS νν°μ νμ±ν λ° ν¬λ§·
- λΌμ°ν°μμ μλνλ VPN (VPNμ΄ μλνλμ§ μλμΌλ‘ ν μ€νΈλ¨)
- λΌμ°ν°μ SSHκ° νμ±νλ winSCP ν΄λΌμ΄μΈνΈ μ€μ
- Notepad ++
μ€μΉ
LAN μ₯μΉ/IP/CIDR λλ λμ IP/CIDRμ μ μ± λΌμ°ν μ GUIλ₯Ό ν΅ν΄ μ¬μ©ν μ μμ§λ§, νμ¨μ΄μλ Routing Policy Data Base (RPDB) fwmark κ·μΉμ΄ ν¬ν¨λμ΄ μμ§ μμ΅λλ€.
λ€μ RPDB fwmarkλ₯Ό μ νμ ν¬νΈ λΌμ°ν μ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
ip rule
0: from all lookup local
9990: from all fwmark 0x8000/0x8000 lookup main
9991: from all fwmark 0x7000/0x7000 lookup ovpnc4
9992: from all fwmark 0x3000/0x3000 lookup ovpnc5
9993: from all fwmark 0x1000/0x1000 lookup ovpnc1
9994: from all fwmark 0x2000/0x2000 lookup ovpnc2
9995: from all fwmark 0x4000/0x4000 lookup ovpnc3
32766: from all lookup main
32767: from all lookup default
```**RPDB** fwmark κ·μΉμ μ€ν¬λ¦½νΈ **/jffs/scripts/nat-start** (λ§μ½ **nat-start**κ° μλ κ²½μ° [User scripts](https://github.com/RMerl/asuswrt-merlin.ng/wiki/User-scripts) νλͺ© μ°Έμ‘°)μ μν΄ μμ±λμ΄μΌ ν©λλ€.
```bash
#!/bin/sh
sleep 10 # λΆν
νλ‘μΈμ€ μ€μ nat-startκ° μ¬λ¬ λ² μ€νλ μ μμΌλ―λ‘ νμν©λλ€.
# μ€λ³΅ κ·μΉμ΄ μμ±λμ§ μλλ‘ νμΈν©λλ€.
for VPN_ID in 0 1 2 3 4 5
do
ip rule del prio 999$VPN_ID 2>/dev/null
done
# RPDB κ·μΉμ μμ±ν©λλ€.
ip rule add from 0/0 fwmark "0x8000/0x8000" table main prio 9990 # WAN fwmark
ip rule add from 0/0 fwmark "0x7000/0x7000" table ovpnc4 prio 9991 # VPN 4 fwmark
ip rule add from 0/0 fwmark "0x3000/0x3000" table ovpnc5 prio 9992 # VPN 5 fwmark
ip rule add from 0/0 fwmark "0x1000/0x1000" table ovpnc1 prio 9993 # VPN 1 fwmark
ip rule add from 0/0 fwmark "0x2000/0x2000" table ovpnc2 prio 9994 # VPN 2 fwmark
ip rule add from 0/0 fwmark "0x4000/0x4000" table ovpnc3 prio 9995 # VPN 3 fwmark
(μΆλ ₯μ λ³Έλ¬Έλ§)λλ ν΄λΉ VPN ν΄λΌμ΄μΈνΈκ° μμλ λ μμ² μμ μΆκ°ν μ μμΌλ©°, VPN ν΄λΌμ΄μΈνΈκ° μ’ λ£λ λ μμ ν μ μμ΅λλ€. (μ€νVPN μ΄λ²€νΈ νΈλ¦¬κ±° vpnclientX-route-pre-up/vpnclientX-down μ°Έμ‘°)
RPDB fwmarkκ° μ μ/νμ±νλλ©΄, μ§μ λ VPN ν΄λΌμ΄μΈνΈλ₯Ό ν΅ν΄ μνλ ν¬νΈλ₯Ό μ νμ μΌλ‘ λΌμ°ν νλ μ μ ν iptables κ·μΉμ μΆκ°νλ κ²μ΄ κ°λ¨ν©λλ€.
μμ 1.
Web HTTP/HTTPS (ν¬νΈ 80 λ° 443) νΈλν½μ 192.168.1.99μμ VPN ν΄λΌμ΄μΈνΈ 2λ₯Ό ν΅ν΄ μ νμ μΌλ‘ λΌμ°ν νκΈ°
iptables -t mangle -A PREROUTING -i br0 -m iprange --src-range 192.168.1.99 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 0x2000/0x2000
μμ 2.
LAN μ₯μΉ 192.168.1.88μμ λͺ¨λ νΈλν½μ VPNμ ν΅ν΄ λΌμ°ν νμ§λ§ RDP μλΉμ€ (ν¬νΈ 3389)λ₯Ό νΈμ€ν νλ κ²½μ°
iptables -t mangle -A PREROUTING -i br0 -m iprange --src-range 192.168.1.88 -p tcp -m multiport --sport 3389 -j MARK --set-mark 0x8000/0x8000
μ°Έκ³ : WANμμμ μμ μ κ·Όμ νμ©νλ €λ©΄ _WAN - Virtual Server / Port Forwarding GUI_μμ ν¬νΈ 3389λ₯Ό ν¬μλ©ν΄μΌ ν©λλ€.
GUIλ₯Ό μ¬μ©νμ§ μκ³ ν¬νΈ ν¬μλ©νκΈ°
μλ₯Ό λ€μ΄ WANμμ ν¬νΈ 63389λ₯Ό λ ΈμΆμν€κ³ μ€μ λ‘ λ΄λΆμμ RDP ν¬νΈ 3389λ‘ νΈμ€ν λλ 192.168.1.88μ λ ΈμΆνλ κ²½μ°```bash iptables -t nat -D VSERVER -p tcp -m tcp --dport 63389 -j DNAT --to-destination 192.168.1.88:3389 2> /dev/null iptables -t nat -I VSERVER -p tcp -m tcp --dport 63389 -j DNAT --to-destination 192.168.1.88:3389
***
***μμ 3.***
ν¬νΈ λ²μλ₯Ό μ§μ νκ³ μ¬λ¬ μμ€/λμκ³Ό μ νμ ν¬νΈ λΌμ°ν
μ κ²°ν©ν μλ μμ΅λλ€.
μ κ°μ LAN μ₯μΉ (**192.168.1.100**μμ **192.168.1.109**κΉμ§ ν¬ν¨)λ **VPN ν΄λΌμ΄μΈνΈ 3**λ₯Ό ν΅ν΄ μ¨ν΄ ν¬νΈ (**80,443** λ° **54000**μμ **54010**κΉμ§ ν¬ν¨)λ₯Ό μ νμ μΌλ‘ λΌμ°ν
ν©λλ€.
iptables -t mangle -A PREROUTING -i br0 -m iprange --src-range 192.168.1.100-192.168.1.109 -p tcp -m multiport --dport 80,443,54000:54010 -j MARK --set-mark 0x4000/0x4000
***μμ 4.***
λΌμ°ν°μμ νΈμ€ν
λλ μλΉμ€λ **VPN**μ ν΅ν΄ λΌμ°ν
λ μ μμΌλ©°, **X**λ₯Ό **VPN** μΈμ€ν΄μ€λ‘ λ체νκ³ μμ© νλ‘κ·Έλ¨μ νμνλλ‘ **--sport xxxx/--dport yyyy**λ₯Ό λ체ν©λλ€.
iptables -t mangle -A OUTPUT -p tcp -m multiport --sport xxxx -j MARK --set-mark 0xX000/0xX000 iptables -t nat -A POSTROUTING -s $(nvram get wan0_ipaddr) -o tun1X -j MASQUERADE
***μμ 5.***
**MAC μ£Όμ** **xx:xx:xx:xx:xx:xx**μμ **Web HTTP/HTTPS** (**ν¬νΈ 80** λ° **443**) νΈλν½μ μ νμ μΌλ‘ **VPN ν΄λΌμ΄μΈνΈ 2**λ₯Ό ν΅ν΄ λΌμ°ν
ν©λλ€.
iptables -t mangle -A PREROUTING -i br0 -m mac --mac-source xx:xx:xx:xx:xx:xx -p tcp -m multiport --dport 80,443 -j MARK --set-mark 0x2000/0x2000
μλ₯Ό λ€μ΄, λ¨μΌ IPSET μ νμ λΌμ°ν
κ·μΉμ (μμ² κ°μ) μμ€/λμ IP, ν¬νΈ, MAC λ° λλ©μΈμ μ°Έμ‘°ν μ μμ΅λλ€.
```bash
iptables -t mangle -A PREROUTING -i br0 -m set --match-set VPN1 src,src,dst -j MARK --set-xmark 0x1000/0x1000
μ¬κΈ°μ IPSET VPN1μ μ¬λ¬ IPSET(μ: ν¬νΈ μ μ© IPSET, μμ€ IP/CIDR, λμ ν¬νΈ IPSET λ° μμ€ MAC IPSET λ±)μ ν¬ν¨ν μ μμ΅λλ€.
μ°Έκ³ : Small Netbuilder νμ @Xentrkλ μ νμ λΌμ°ν λ° LAN ν΄λΌμ΄μΈνΈ, OpenVPN ν΄λΌμ΄μΈνΈ λ° OpenVPN μλ²μ© μΆκ° μ νμ λΌμ°ν κΈ°λ₯μ ν¬ν¨ν IPSET κΈ°μ μ νμ©νκ³ μμ΅λλ€. μμΈν μ 보λ GitHubμ x3mRouting ~ Asuswrt-Merlin νμ¨μ΄μ© μ νμ λΌμ°ν μ μ°Έμ‘°νμΈμ.