[ https://issues.apache.org/jira/browse/SSHD-1066?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17220018#comment-17220018 ]
Lyor Goldstein edited comment on SSHD-1066 at 10/24/20, 6:33 AM: ----------------------------------------------------------------- [~gnodet], [~twolf] Can you take a look at https://github.com/apache/mina-sshd/pull/175 ? Thanks. was (Author: lgoldstein): [~gnodet], [~twolf] Can you take a look at https://github.com/apache/mina-sshd/pull/175 ? Tanks. > Support multiple local interfaces in PortForwarding > --------------------------------------------------- > > Key: SSHD-1066 > URL: https://issues.apache.org/jira/browse/SSHD-1066 > Project: MINA SSHD > Issue Type: New Feature > Affects Versions: 2.5.1 > Reporter: Guillermo Grandes > Assignee: Lyor Goldstein > Priority: Major > Time Spent: 20m > Remaining Estimate: 0h > > I'm trying to listen in same port on 2 IPs of same machine, _multihomed_, the > equivalent in openssh is: > {noformat} > # ssh -L 127.0.0.2:8080:test.javastack.org:80 -L > 127.0.0.3:8080:test.javastack.org:80 test-sshd@server -N > # sudo netstat -lntp | grep :8080 > tcp 0 0 127.0.0.3:8080 0.0.0.0:* LISTEN 2650/ssh > tcp 0 0 127.0.0.2:8080 0.0.0.0:* LISTEN 2650/ssh > {noformat} > Sample code to reproduce the test case: > {code:java} > public static final int DEFAULT_TIMEOUT = 10000; > public static void test(final String username, final String password, > final String host, final int port) > throws IOException { > boolean testLocal = true; > try (SshClient client = SshClient.setUpDefaultClient()) { > > client.setServerKeyVerifier(AcceptAllServerKeyVerifier.INSTANCE); > client.start(); > try { > ConnectFuture connect = > client.connect(username, host, port); > connect.await(DEFAULT_TIMEOUT); > ClientSession session = > connect.getClientSession(); > session.addPasswordIdentity(password); > session.auth().verify(DEFAULT_TIMEOUT); > if (testLocal) { > System.out.println("================== > Local 1 =================="); > ExplicitPortForwardingTracker > localTracker1 = session.createLocalPortForwardingTracker( > new > SshdSocketAddress("127.0.0.2", 8080), > new > SshdSocketAddress("test.javastack.org", 80)); > sleep(1000); > > System.out.println("LocalPortForwarding: " // > + > localTracker1.getLocalAddress() + " -> " // > + > localTracker1.getRemoteAddress()); > SshdSocketAddress localSocketAddress1 = > localTracker1.getLocalAddress(); > if (localSocketAddress1 != null) { > Proxy proxy = new > Proxy(Proxy.Type.HTTP, > new > InetSocketAddress(localSocketAddress1.getHostName(), // > > localSocketAddress1.getPort())); > testRemoteURL(proxy, > "http://test.javastack.org/"); > } > System.out.println("================== > Local 2 =================="); > ExplicitPortForwardingTracker > localTracker2 = session.createLocalPortForwardingTracker( > new > SshdSocketAddress("127.0.0.3", 8080), > new > SshdSocketAddress("test.javastack.org", 80)); > sleep(1000); > > System.out.println("LocalPortForwarding: " // > + > localTracker2.getLocalAddress() + " -> " // > + > localTracker2.getRemoteAddress()); > SshdSocketAddress localSocketAddress2 = > localTracker2.getLocalAddress(); > if (localSocketAddress2 != null) { > Proxy proxy = new > Proxy(Proxy.Type.HTTP, > new > InetSocketAddress(localSocketAddress2.getHostName(), // > > localSocketAddress2.getPort())); > testRemoteURL(proxy, > "http://test.javastack.org/"); > } > } > } finally { > client.stop(); > } > } > } > private static final void sleep(final long t) { > try { > Thread.sleep(t); > } catch (Exception ign) { > } > } > private static final void testRemoteURL(final Proxy proxy, final String > url) throws IOException { > HttpURLConnection connection = (HttpURLConnection) new > URL(url).openConnection(proxy); > connection.setConnectTimeout(DEFAULT_TIMEOUT); > connection.setReadTimeout(DEFAULT_TIMEOUT); > System.out.println("Get URL: " + connection.getURL()); > try { > BufferedReader in = new BufferedReader(new > InputStreamReader(connection.getInputStream())); > System.out.println("Response from server:"); > String inputLine; > while ((inputLine = in.readLine()) != null) { > System.out.println(inputLine); > } > in.close(); > } catch (Exception e) { > System.out.println("Failed: " + e); > } > } > public static void main(String[] args) throws Throwable { > test("test-sshd", "secret", "server", 22); > sleep(3000); > } > {code} > Error received: > {code:none} > Exception in thread "main" java.io.IOException: Multiple local port > forwarding addressing on port=8080: current=test.javastack.org:80, > previous=test.javastack.org:80 > at > org.apache.sshd.common.forward.DefaultForwardingFilter.startLocalPortForwarding(DefaultForwardingFilter.java:208) > at > org.apache.sshd.client.session.AbstractClientSession.startLocalPortForwarding(AbstractClientSession.java:374) > at > org.apache.sshd.client.session.ClientSession.createLocalPortForwardingTracker(ClientSession.java:316) > at > org.javastack.jentunnel.sandbox.SimpleBindingTest.test(SimpleBindingTest.java:52) > {code} > Result Expected: > {noformat} > ================== Local 1 ================== > LocalPortForwarding: 127.0.0.2:8080 -> test.javastack.org:80 > Get URL: http://test.javastack.org/ > Response from server: > OK > ================== Local 2 ================== > LocalPortForwarding: 127.0.0.3:8080 -> test.javastack.org:80 > Get URL: http://test.javastack.org/ > Response from server: > OK > {noformat} > * Note-1: The usage of loopback addresses (127.0.0.0/8) and same destination > is to simplify/reproduce easily, don't care. > * Note-2: I don't checked if > startRemotePortForwarding/startDynamicPortForwarding reproduce same issue as > startLocalPortForwarding. But I suppose that yes. -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@mina.apache.org For additional commands, e-mail: dev-h...@mina.apache.org