공개 VPN 연결을 통해 VPS [Ubuntu] SSH 서비스를 라우팅할 수 있지만 다른 모든 데이터는 공개 주소를 통해 종료되도록 허용할 수 있습니까? 이를 달성하려면 어떤 종류의 iptables 마법이 필요합니까?
SSH 데이터 → OPEN VPN을 통해 기타 모든 데이터 → 공개를 통해
VPN에 연결하기 전의 ifconfig 세부 정보는 다음과 같습니다.
eth0 Link encap:Ethernet HWaddr 52:54:00:32:2a:e6
inet addr:18x.144.31.77 Bcast:185.144.31.255 Mask:255.255.254.0
inet6 addr: 2a03:a0e0:bad:bad::574/128 Scope:Global
inet6 addr: 2a03:a0e0:bad:bad::573/128 Scope:Global
inet6 addr: 2a03:a0e0:bad:bad::572/128 Scope:Global
inet6 addr: 2a03:a0e0:bad:bad::571/128 Scope:Global
inet6 addr: 2a03:a0e0:bad:bad::570/64 Scope:Global
inet6 addr: fe80::5054:ff:fe32:2ae6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:73928 errors:0 dropped:1 overruns:0 frame:0
TX packets:723 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4508581 (4.5 MB) TX bytes:95511 (95.5 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:25 errors:0 dropped:0 overruns:0 frame:0
TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2520 (2.5 KB) TX bytes:2520 (2.5 KB)
VPN 연결 후
eth0 Link encap:Ethernet HWaddr 52:54:00:32:2a:e6
inet addr:185.144.31.77 Bcast:185.144.31.255 Mask:255.255.254.0
inet6 addr: 2a03:a0e0:bad:bad::574/128 Scope:Global
inet6 addr: 2a03:a0e0:bad:bad::573/128 Scope:Global
inet6 addr: 2a03:a0e0:bad:bad::572/128 Scope:Global
inet6 addr: 2a03:a0e0:bad:bad::571/128 Scope:Global
inet6 addr: 2a03:a0e0:bad:bad::570/64 Scope:Global
inet6 addr: fe80::5054:ff:fe32:2ae6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3749 errors:0 dropped:0 overruns:0 frame:0
TX packets:381 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:282634 (282.6 KB) TX bytes:60862 (60.8 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.2.62 P-t-P:10.8.2.61 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:65 errors:0 dropped:0 overruns:0 frame:0
TX packets:62 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:7025 (7.0 KB) TX bytes:16197 (16.1 KB)
답변1
iptables의 대안: 네트워크 네임스페이스를 사용합니다. 루트로서 다음과 같은 작업을 수행하십시오.
ip addr show dev tun0
ip netns add vpnssh
ip link set tun0 netns vpnssh
ip netns exec vpnssh su -c 'xterm &' user_name
tun0
OpenVPN 엔드포인트의 네트워크 인터페이스와 user_name
이를 실행 중인 사용자는 어디에 있습니까 ssh
? inet(이라고 함 vpn_local_ip
) 및 피어( vpn_peer_ip
) 주소를 기록해 두십시오 tun0
.
이제 모든 하위 프로세스에서만 "표시"되는 xterm이 있지만 tun0
(validation을 사용하여 ip link
) 불행하게도 이를 이동하면 삭제됩니다. sudo
따라서 이 창에서
ip link set tun0 up
ip addr add vpn_local_ip peer vpn_peer_ip dev tun0
ip route del default
ip route add default via vpn_local_ip dev tun0
이제 ssh
이 창을 실행할 수 있으며 OpenVPN 연결을 사용합니다. 필요에 따라 모든 것을 스크립팅합니다( ip netns exec vpnssh ...
2부).